比较 std::map< Ty1,Ty2>,std::unordered_map< Ty1, Ty2>和 vector<pair< _Ty1,_Ty2>>。尝试把自己的定义的类class MyClass 用于map 和unordered map 的第一个模板参数 Ty1,还需要进行什么定义?
时间: 2024-03-22 15:37:40 浏览: 128
std::map和std::unordered_map都是关联容器,都可以用于存储键值对,但它们的实现方式不同。std::map是基于红黑树实现的,所以它的元素是有序的;而std::unordered_map是基于哈希表实现的,所以它的元素是无序的。vector<pair<_Ty1, _Ty2>>则是一个顺序容器,可以用于存储键值对,但是它的查找和插入效率要比map和unordered_map低得多。
如果要将自定义的类MyClass用于map和unordered_map的第一个模板参数Ty1,需要满足以下要求:
1. MyClass需要定义小于运算符(operator<),以便map可以对元素进行排序;
2. MyClass需要提供哈希函数(hash函数),以便unordered_map可以将元素映射到桶中。
例如,假设我们定义了如下的MyClass类:
```c++
class MyClass {
public:
int key;
std::string value;
bool operator<(const MyClass& other) const {
return key < other.key;
}
};
struct MyClassHash {
size_t operator()(const MyClass& obj) const {
return std::hash<int>()(obj.key);
}
};
```
则可以将MyClass用于map和unordered_map的第一个模板参数Ty1,如下所示:
```c++
std::map<MyClass, int> myMap;
std::unordered_map<MyClass, int, MyClassHash> myUnorderedMap;
```
需要注意的是,如果MyClass的成员变量发生变化,可能会导致它们在map和unordered_map中的顺序发生变化,因此需要谨慎使用。
阅读全文