问题标签 [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++ - 如何重复插入()到带有提示的 std::set 中?
根据 cplusplus.com,std::set::insert()
采用提示迭代器插入项目的重载从 C++98 更改为 C++11。在 C++98 中,提示应该是:
如果位置指向将在插入元素之前的元素,则该函数优化其插入时间。
但是,在 C++11 中,提示已更改,现在应该是:
如果位置指向将跟随插入元素的元素(或者指向末尾,如果它是最后一个),则该函数优化其插入时间。
但是,在 C++98 或 C++11 中,返回值是相同的:
一个迭代器,指向新插入的元素或集合中已经具有相同值的元素。
对于 C++98,我有插入一系列相邻项的代码,如下所示:
我可以在 C++11 中将其更改为:
但是我需要重构代码以从 C++98 到 C++11,我是否在这里做错了什么,或者如果没有,这种改变的动机是什么,为什么insert()
改变的论点但是不是返回值?
c++ - 如何在c ++中搜索集合
我有一组类 Item :
我可以只在集合中搜索一个值吗?例如,按 item :: name 在集合中搜索。
c++ - 在 std::set 上按名称查找对象
我需要将一些对象存储在 std:set (或任何其他类型的查找表)中并按名称搜索它们。
例如,假设我有一个类(伪代码):
我想将其存储在容器中并按名称搜索对象。我不能在 std::set 上插入它们,因为据我所知,我必须构造一个完整的对象进行搜索。
我的第二个方法是使用像 std::map 这样的 std::map,但是,我需要为此复制名称,并且我不想复制密钥。
有没有办法将这种对象存储在 std::set (或任何其他容器)中并通过键(而不是对象)搜索?
谢谢
c++ - 如何使用 is_transparent 类型的比较器?
使用 C++14,我们可以将某些关联容器(如 std::set)的元素与存储在容器中的元素以外的其他类型进行比较。当比较器表示为一种类型时,它应该可以工作is_transparent
(参见例如std::set::find)。
假设我有一个字符串包装器,它对字符串执行一些检查(如果它的格式是有效的格式等等 - 不是很重要,但构造它足够重,我想避免它+它可以抛出异常)并且它是存储在 std::set 中以具有唯一值的容器。我应该如何为它写一个比较器?它应该看起来像下面的那个吗?我可以超载并使用 mysw::operator<()
来达到同样的效果吗?
我相信上面的代码应该能按预期工作,但是当我用 g++4.9 和 clang++3.6 对其进行测试时,两者都产生了关于缺少从string
to转换的错误,key_type
就好像Comparator::operator()
从未考虑过字符串重载一样。我错过了什么吗?
c++ - 如何确保自定义数据的 boost::unordered_set 中没有重复项
我需要我的容器只包含独特的元素,所以我有一个这样的结构:
和一个容器:
现在我需要改变我的容器来boost::unordered_set
输入,我需要修改仿函数吗?我很困惑,因为我知道我无法将 order 和 uniqueness 实现分开,而这一次容器不是 ordered 。所以我担心我的operator()
超载将毫无用处。
c++ - 如何在值为 std::set 的 std::map 中使用 emplace() (从某物映射到一个集合)?
问题
我有一个std::map<int, std::set<int>>
名为misi
. 我想知道为什么misi.emplace(2345, {6, 9});
并且misi.emplace({2345, {6, 9}});
不按预期工作,如下所示。
编码
上面是std::set
,您可以看到初始化列表构造函数并且emplace()
工作正常。
以上是std::map
to int
,int
您可以看到这些方法也可以完美运行,除了在最后一个示例中,std::pair
可能有些多余。我想知道是否std::pair
是就地建造的。(好吧,我想不是)
对于 astd::map
到 a std::set
,初始化列表构造函数如上所示完美运行。但是emplace()
没有!(如下所示)
在这里,以下语法是可以的,但并不完全符合我的要求:
所以,似乎没有办法std::pair
就地创建,而且似乎std::set
是就地创建的(对吧?)。有没有人有任何想法?
我正在使用的编译器是:
c++ - 如何将字符串中的 std::set 字符作为字符串?
我有一个std::string
. 我想要其中的一组唯一字符,每个字符表示为std::string
.
我可以很容易地得到一组字符:
我可以将它们转换为这样的字符串:
但这样的做法似乎很尴尬。有没有更好的(最好是标准库单行)方法来做到这一点?
c++ - 如何计算std :: set中给定元素之前的元素数量
我想在给定元素的下限之前找到集合中不存在的元素,我想使用指针算术和 std::set::iterators 因为它们的行为像指针,这是我尝试的:
有没有办法在给定元素的下限之前找到集合中不存在的元素?
c++ - 是否 std::set.find(element) 使用类中的 == 运算符来比较元素?
说我有
Find 确实使用了类中的 == 运算符,对吗?
我的参考资料还说它有 log(n) 最坏情况运行时,其中 n 是集合中元素的数量。这在内部是如何实现的?我知道关键是集合中的元素有一个顺序(因此插入需要很长时间才能创建该顺序),对于整数集来说,顺序意味着什么很清楚,但对于随机类来说不是那么多。
c++ - 修改 std::set 中的元素
我有以下代码-:
输出 -:
该集合的元素根本没有被reverse()
函数修改。
我怀疑集合中的元素根本无法修改。但是,如果是这种情况,为什么编译器本身不首先给出错误?
我-std=c++14
在 Windows 7 上使用带有标志的 TDM-GCC 4.9.2。