C容器集数组功能

哪个是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).

上一篇:c – 哪个STL容器可以在两个方向上生长?


下一篇:手把手教你在CentOS上搭建Kubernetes集群