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

Jef*_*f L 2 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;
};
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,CustomPair将是一个包含键和值的模板类.如果这是可能的,那么这么简单还是有什么我应该注意的?

lot*_*har 7

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

然后,您需要提供一个只比较类的关键部分的比较,并且只要对象在集合中,关键部分必须是const(不随时间变化).正如注释中所提到的,集合的元素只能作为consts访问,因此如果要更改此类元素的值,则需要const_cast写入访问权限或声明成员可变.

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