gpt4 book ai didi

c++ - 编写与 unordered_map 一起使用的类。

转载 作者:行者123 更新时间:2023-11-30 00:58:12 25 4
gpt4 key购买 nike

我想使用 boost 映射,文档说我需要一个相等函数和一个散列函数。我想了解他们应该做什么,但由于我找不到任何示例,所以我不确定如何去做,所以我正在寻找一个简单的示例,例如具有成员 x、y 或类似的东西的点类。

编辑:终于让它工作了。希望我不必为此浪费太多时间。无论如何谢谢大家。

#include <boost/functional/hash.hpp>
#include <boost/unordered_map.hpp>
#include <boost/foreach.hpp>
#include <iostream>

namespace test { // class whose source i can't edit
class point
{
public:
float x;
float y;
point() : x(0), y(0) {}
point(int x, int y) : x(x), y(y) {}
point(float x, float y) : x(x), y(y) {}
point(double x, double y) : x((float) x), y((float) y) {}

bool operator==(point const& other) const
{
return x == other.x && y == other.y;
}
};
}

namespace test { // my source file
std::size_t hash_value(point const &p) {
boost::hash<int> hasher;
return hasher(p.x) + hasher(p.y);
}
}

int main() {
boost::unordered_map<test::point, std::string> myMap;
test::point p1(1, 2);
myMap[p1] = "1"; //now it works
std::cout << myMap[p1] << std::endl;
return 0;
}

最佳答案

相等性和哈希值并不难定义。平等:

class Point {
int x, y;
bool operator==(const Point& p) {
return (x == p.x && y == p.y);
}
};

散列往往涉及专门化函数或类。

template<> class boost::hash<Point> {
public:
size_t operator()(const Point& p) {
return boost::hash<int>(p.x) + boost::hash<int>(p.y);
}
};

您可能需要阅读 hash_map 实现的细节以获取详细信息,并且您可能还想定义不同的哈希算法。

关于c++ - 编写与 unordered_map 一起使用的类。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6885707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com