有没有办法使用其中一个stl算法定义来获取集合中成员的成员?
我可以使用类似下面的实用方法,但我必须认为这已经存在于stl中的某种通用形式:
ElementPtr elementAt(int elementNumber)
{
list<ElementPtr>::iterator elementIt = elements.begin();
for (int counter = 0; counter < elementNumber && elementIt != elements.end(); counter++, elementIt++)
{
}
return *elementIt;
}
答案 0 :(得分:3)
#include <iterator>
list<ElementPtr>::iterator elementIt = elements.begin();
std::advance(elementIt, elementNumber);
x = *elementIt;
这基本上与您的代码有关。
但是,您最想要这样做的事实表明您的数据结构是错误的。集合不是设计为像这样处理。
答案 1 :(得分:2)
如果它实现为二叉树或哈希表,则没有可用的索引机制,这两种方法对于集合都是通用的。
答案 2 :(得分:2)
您实际使用的是正确的容器类型吗?请考虑使用排序向量。
答案 3 :(得分:2)
您可以使用Boost.MultiIndex在同一基础数据上构建排序和随机访问索引。
答案 4 :(得分:1)
我不相信,因为“index-of”在广义std::set
方面并没有真正意义。除非您的集合被构造(并初始化)一次并且从未改变过,否则您无法保证对index-of运算符的调用结果总是会返回可预测的结果。
答案 5 :(得分:1)
你将获得的最好的是迭代器。集合是值 索引的容器(嗯,更多是散列表中的引用)。如果我们知道你想要做什么,也许我们可以更好地回答你的问题。
我认为你将一个集合等同于一个数组;它们的结构完全不同,数字索引不适用。
答案 6 :(得分:0)
你说设置,但你的代码实际上表示列表。两者不一样。集合旨在通过其值检索其元素。列表,您可以使用std::advance
向前推进。
答案 7 :(得分:0)
集合中没有数字索引这样的东西。你需要使用矢量。更重要的是,如果您确实碰巧在集合中“获得第n个项目”,则无法保证在修改集合之后它(在同一个地方)。