c++ - 是否可以使用自定义类代替 STL 映射中的 std::pair?

标签 c++ map std-pair

这可能吗?

#include <map>

class Example {

  private:
  std::map<std::string, std::string, less<std::string>,
    std::allocator< CustomPair<std::string, std::string> > > myMap;
};

在上面的示例中,CustomPair 将是一个包含键和值的模板类。如果可能的话,是不是就这么简单,或者有什么我应该注意的吗?

最佳答案

只能推测您的真正意图,所以我假设您已经有一个包含键和值的类。在这种情况下,带有自定义比较的 std::set 可能是比 std::map 更好的选择。

然后您需要提供一个比较,它只会比较您的类的关键部分,并且只要对象在集合中,关键部分就必须是 const(不随时间变化)。 如评论中所述,集合的元素只能作为常量访问,因此如果您想更改此类元素的值,您需要对写访问进行 const_cast 或声明成员可变。

在另一个回答中,iain 提出了另一个非常好的建议。如果您很少插入容器并且主要访问容器以搜索元素,那么排序的 std::vector 和 std::binary_search 是集合的非常有效的替代方案。

关于c++ - 是否可以使用自定义类代替 STL 映射中的 std::pair?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/888611/

相关文章:

c++ - 要映射的对 vector

c++11 - 使用 {} 构造函数直接从 char* 初始化 std::string

java - 如何迭代多个 map

java - 为什么 Map<String, Object> 不等于 Map<String, ?>

c++ - c++中一对对象的映射比较器

c++将类成员函数添加到Map中

c++ - 在内存网格上应用 Assimp 后处理

c++ - 如何使 MS-Visual C++ 应用程序最大化?

c++ - 介于 multimap 和 vector 之间的数据结构

javascript - 如何在 javascript 中创建动态映射键?