在 c++ 中定义一组 set 迭代器

Define a set of iterators of set in c++

提问人:fva 提问时间:12/15/2019 最后编辑:fva 更新时间:12/15/2019 访问量:272

问:

我正在尝试定义一个集合,其中的元素是另一个集合的迭代器。详细地说,我已经定义了以下集合,但是当我想在集合中插入一个元素时,c++ 不允许。如何构造一组迭代器?

set<set<set<int>>::iterator> s;
set<set<int>> s1;
set<int> s2;
s2.insert(2);
s1.insert(s2);
s.insert(s1.begin());
C++ STL 迭代器 C++-标准库

评论

0赞 PaulMcKenzie 12/15/2019
这进入了 XY 问题领域。为什么需要迭代器这样的东西?set
0赞 WhozCraig 12/15/2019
“C++ 不允许” - 随后的、完整的、逐字的错误消息应包含在您的问题中
0赞 Sam Varshavchik 12/15/2019
现在尝试插入 s1.begin()。毕竟,这是你在这里的明确意图。
0赞 WhozCraig 12/15/2019
“我如何构造一组迭代器?”- 你没有,至少没有默认的比较器类型。假设您修复了已发布的代码的正确类型(无论如何,您的构建都将失败。设置迭代器是标准的双向迭代器(它们支持增量、前进等)。它们不支持有序比较(即默认比较器,默认为 ,设置迭代器不公开)。如果你真的想要这个,坦率地说,我很想知道它有什么用,你需要一个自定义比较器类型,我警告走这条路。s.insert(s1.begin())std::set<Type>std::less<Type>operator <
0赞 fva 12/15/2019
感谢您的评论。我从您的评论中了解到,我应该定义一个两个迭代器的比较函数。

答:

0赞 Marshall Clow 12/15/2019 #1

将某样东西放入套装中有什么要求?

你需要它是可复制的(广义的),并且你需要一个施加严格弱排序的比较函数。(默认值为 )。由于没有提供这样的运算符,因此您必须自己编写一个运算符。<set::iterator

有效地做到这一点可能是一个挑战。

评论

0赞 fva 12/15/2019
你对定义比较函数有什么想法吗?每个迭代器都指向一个集合,也许最好定义集合的比较函数。
0赞 Marshall Clow 12/18/2019
先于一个迭代器排序另一个迭代器意味着什么?这是需要回答的问题。[注意:不一定只有一个唯一的答案]