std::map和std:: unordered_map中重载自定义类作为键

2 阅读1分钟
#include <iostream>
#include <map>

class MyClass {
public:
    int value;

    MyClass(int v) : value(v) {}

    // 定义比较操作(用于排序和比较键)
    bool operator<(const MyClass& other) const {
        return value < other.value;
    }
};

int main() {
    std::map<MyClass, int> myMap;

    MyClass obj1(10);
    MyClass obj2(20);

    myMap[obj1] = 1;
    myMap[obj2] = 2;

    for (const auto& pair : myMap) {
        std::cout << "Key: " << pair.first.value << ", Value: " << pair.second << std::endl;
    }

    return 0;
}
#include <iostream>
#include <unordered_map>

// 自定义类
class MyClass {
public:
    int value;

    MyClass(int v) : value(v) {}
};

// 自定义哈希函数对象
template <class T>
class MyHash {
public:
    size_t operator()(const T& x) const {
        std::hash<T> z;
        return z(x.value);
    }
};

// 自定义比较函数对象
class MyEqualTo {
public:
    bool operator()(const MyClass& a, const MyClass& b) const {
        return a.value == b.value;
    }
};

int main() {
    std::unordered_map<MyClass, int, MyHash<MyClass>, MyEqualTo> myMap;

    MyClass obj1(10);
    MyClass obj2(20);

    myMap[obj1] = 1;
    myMap[obj2] = 2;

    // 访问元素
    auto it = myMap.find(obj1);
    if (it!= myMap.end()) {
        std::cout << "Value for key " << obj1.value << ": " << it->second << std::endl;
    } else {
        std::cout << "Key " << obj1.value << " not found" << std::endl;
    }

    return 0;
}