哪个是 C++ 中最好的容器,它可以 -
- 仅存储唯一值(例如
set
) - 可以在恒定时间内使用索引查找那些值(例如
array
)
我基本上需要在第一阶段进行迭代并收集所有 unique
元素,顺序真的无关紧要。
但是在第二阶段,我必须提供容器中的每个元素,但只能一个一个提供。由于调用者可以知道我的容器的大小,它会一个一个地为我提供 index
,这样 0 < idx < 容器的大小。
目前,我想到的唯一解决方案是两个维护两个容器 vector
和 set
,我想知道是否有任何容器提供相同的?
class MyContainer{
private:
std::set<Fruits> setFruits;
std::vector<Fruits> arrFruits; // can have indexed access
public:
void collectFruits(const Fruits& fruit){
if(setFruits.find(fruit) == setFruits.end()){
// insert only if it doens't contains
setFruits.insert(fruit);
arrFruits.push_back(fruit);
}
}
};
最佳答案
STL 的创建者 Alex Stepanov 曾经说过“尽可能使用 vector 。如果不能使用 vector ,请重新设计解决方案,以便可以使用 vector 。”记住这个好建议:
阶段 1:收集独特元素
std::vector<Foo> elements;
// add N elements
elements.push_back(foo1);
...
elements.push_back(fooN);
// done collecting: remove dupes
std::sort(elements.begin(), elements.end());
elements.erase(std::unique(elements.begin(), elements.end()),
elements.end());
阶段 2:好吧,现在我们有了 k
唯一元素的 vector
,具有恒定时间索引访问(索引 0..k-1)。
关于C++ 容器集 + 数组功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31821049/