C++ 容器集 + 数组功能

标签 c++ c++11 containers c++14

哪个是 C++ 中最好的容器,它可以 -

  • 仅存储唯一值(例如set)
  • 可以在恒定时间内使用索引查找那些值(例如array)

我基本上需要在第一阶段进行迭代并收集所有 unique 元素,顺序真的无关紧要。

但是在第二阶段,我必须提供容器中的每个元素,但只能一个一个提供。由于调用者可以知道我的容器的大小,它会一个一个地为我提供 index,这样 0 < idx < 容器的大小。

目前,我想到的唯一解决方案是两个维护两个容器 vectorset,我想知道是否有任何容器提供相同的?

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/

相关文章:

带 double 的 C++ 可变参数模板

c++ - 如何检测是否有func。是一个常量?并标记其他功能。 constexpr 取决于它?

environment-variables - kubernetes 默认创建了哪些环境变量

c++ - 顺序容器和迭代器算法

matlab - 使用哈希表创建矩阵 MATLAB

c++ - 更改 CMAKE_CXX_FLAGS_DEBUG 和 CMake 中的 friend 的默认值

c++ - 如何在没有互联网连接的情况下运行 gSOAP 代码生成器?

c++ - 为什么右值引用绑定(bind)到 xvalue 在我的代码中不起作用?

c++ - 为什么添加代码会破坏正在运行的功能,即使它没有被执行?

c++ - 扩展类而不更改其名称