c++ - 使用哪个排序的 STL 容器来通过特殊键进行快速插入和查找?

标签 c++ stl key containers

我有一些数据,每个数据项都有一个关联的键。 key 由两部分组成:我们称之为颜色和 ID。我想按颜色迭代容器以加快渲染速度,并且我还想仅通过 id 查找容器中的项目。

我尝试使用 std::map 来实现此目的

class MyKey {
public:
  int color;
  int id;
  bool operator<(...)
  bool operator==(...)
};

但我无法提供 < 运算符来保持数据按颜色排序,同时允许 map::find 单独处理 id(即没有有关颜色的信息)。

我希望插入和查找操作都很快(例如 O(log(n)))。

有什么想法可以使用什么样的容器来实现这个吗?

最佳答案

改编示例 here来自 Boost.Multi_index 基于以下修改:

typedef multi_index_container<
    MyKey,
    indexed_by<ordered_unique<identity<MyKey> >,
    ordered_non_unique<member<MyKey,int,&MyKey::color> >
  > 
> DataSet;

关于c++ - 使用哪个排序的 STL 容器来通过特殊键进行快速插入和查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3734226/

相关文章:

mysql - Rails Mysql 结果 - fetch_fields 方法

c++ - 在 C++ 中,如何在 MacOS X 中将程序与 libpng/zlib/loadpng 链接?

c++ - **在C/C++中是什么意思?

c++ - map<string1, map<string2, map<string3, string>>> 是否比将字符串连接到 map<string1string2string3, string> 慢?

c++ - 为什么 STL 使用/不使用分配器参数重载其构造函数?

c++ - 如何使用包含大量数据的类元素处理 STL 容器

Android - 安全存储

vim - (g)vim tab 键在打开文件或分割窗口时没有任何提示

c++ - Qt C++ 迭代时修改列表中的对象

c++ - 将数据抽样为两组