哪个是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);
}
}
};
答案 0 :(得分:4)
STL的创始人亚历克斯·斯捷潘诺夫(Alex Stepanov)曾经说过&#34;尽可能使用向量。如果你不能使用矢量,重新设计你的解决方案,以便你可以使用矢量。&#34;考虑到这个好建议:
阶段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:嗯,现在我们有vector
个k
个唯一元素,具有常时索引访问权(索引为0..k-1)。
答案 1 :(得分:2)