问题标签 [stdset]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 带堆的 Bellman-Ford 不适用于自定义比较功能
我已经实现了一个 Bellman-Ford 算法来解决一个问题(带图),但是这个解决方案太慢了,所以我用堆 (std::set) 替换了 Bellman-Ford 的队列,所以最短的解决方案路径会更快找到。(以某种方式接近 Dijkstra 算法)
现在,我在堆中插入节点编号,因此默认的 std::set 将使用节点编号而不是成本对节点进行排序。一切都很好,算法给出了正确的答案。
如果我为 std::set 引入自定义比较函数,以便节点将按它们的距离而不是按它们的数量排序,则算法不再提供到其余节点的最短距离。
这是我的比较功能:
因此,作为 BF 算法,该算法一直运行到无法改进为止。比较函数能否以某种方式“弄乱”std::set,因为这是我明白为什么添加这个比较函数会给出错误答案的唯一原因......
我的意思是,如果节点的顺序完全随机,为什么它会起作用,但如果它们按成本排序则不起作用......
c++ - std::set 怪异<重载错误
所以,我有这个代码:
无法编译,因为:
但我没有重载运算符<,我无法弄清楚这意味着什么......
谢谢,
朱利安。
c++ - 设置检测插入失败
有没有一种简单的方法来检测由于被插入的项目已经存在于集合中而没有发生集合插入?例如,我想向用户显示一条显示插入失败的消息,以便他们可以更轻松地查找和删除数据中的重复项。这是一些伪代码来演示我想做的事情:
c++ - C ++设置搜索对元素?
所以我有一套pairs<string ,string>
我想用它find()
来搜索一个字符串,该字符串将位于该对的“第一个”中,然后如果我首先找到该字符串,我想从该函数返回第二个。
我目前的尝试是..
c++ - Qt containers - which should I choose?
Qt
offers a set of STL
-like containers.
However, there is no container available, which stores ordered values by their order (like std::set
) and QSet
for some reasons behaves like std::unordered_set
. I realize that probably O(1)
lookups in the "set" data structure called might be a great thing, but I certainly cannot understand why this decision was made.
Which container should I use to store ordered item collections (I suspect that QMap
with fictive values is a very poor choice) and why doesn't Qt
offer something like std::set
?
I guess there might be some technical reason behind this, but, unfortunately, I can't think of one.
algorithm - 在 C++ 中将 std::map 复制到 std::set
是否可以使用 STL 算法将 std::map 值深度复制到 std::set?
我不想明确插入新集合。
我不想明确地这样做:
但要找到一种更简洁、更优雅的方式来做到这一点,并具有深刻的价值副本。
c++ - 使用数字序列有效地初始化 std::set
一个明显的(天真的?)方法是:
这是合理的可读性,但据我了解,这不是最佳的,因为它涉及重复搜索插入位置并且没有利用输入序列已经排序的事实。
是否有一种更优雅/更有效(或事实上)的方式来初始化一个std::set
数字序列?
或者,更一般地说,如何有效地将有序的条目列表插入到集合中?
更新:
查看文档,我刚刚注意到接受迭代器以指示插入位置的构造函数:
这意味着这将更有效:
这看起来很合理,但我仍然愿意接受更多建议。
c++ - C++ std::set 查找函数重载 == 运算符
我正在使用套装。我使用自定义结构作为键。我正在插入一个值并试图找到插入的值。但它似乎永远找不到元素。
我已经覆盖了 == 运算符和 < 运算符。
这是结构的代码:
这是主要的代码
它总是在断言语句中失败。我究竟做错了什么?
编辑-好的,现在我知道它根本不使用 == 运算符。这就是我想要的。我需要按距离排序的数据结构。但我应该可以使用 id 将其删除。是否有任何干净的方法或已经存在的数据结构来做到这一点?
c++ - 使用 set_difference 算法找不到错误
我有:
“对象.h”
“对象.cpp”
我有一些适用于对象的功能,
问题描述:
我实现了operator<
and ,operator==
通过它来执行两个实例的比较,m_number
但是当集合detectedObjects
和trackedObjects
包含相同m_number
的元素时,std::set_difference
返回所有元素而不是预期的空结果集。
我什至尝试将函数对象compare
作为模板参数提供给集合,但结果我得到了很多编译器错误=
并且!=
没有正确定义。
我想知道是什么问题?
c++ - 如何在使用算法保持原始排序的同时从未排序的 std::vector 中删除重复项?
我有一个整数数组,我需要从中删除重复项,同时保持每个整数第一次出现的顺序。我可以看到这样做,但想象有更好的方法可以更好地利用 STL 算法?插入超出了我的控制范围,因此我无法在插入之前检查重复项。
使用 STL 算法如何做到这一点?