哪个是C中最好的容器,可以 –
>仅存储唯一值(例如set)
>可以在常量时间使用索引查找这些值(例如数组)
我基本上需要在第一阶段迭代并收集所有独特的元素,顺序真的没关系.
但是,在第二阶段,我必须提供容器中的每个元素,但只能逐个提供.由于调用者可以知道我的容器的大小,它一个接一个地提供索引,使得0 <0. idx<容器的大小. 现在,我想到的唯一解决方案是两个维护两个容器矢量和设置,我想知道是否有任何容器提供相同的?
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曾经说过“尽可能使用向量.如果你不能使用向量,重新设计你的解决方案,以便你可以使用向量.”有了这个好建议:
阶段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个唯一元素的向量,具有恒定时间索引访问(索引为0..k-1).