问题描述
我将std :: map定义为:
struct Key // Key of my dicitonary
{
float index[3];
};
struct Value // Value of my dictionary
{
float color[3];
float operator[](int &a) const { return color[a]; }
};
Key key = {a, b, c};
Value value = {d, e, f};
std::map<Key, Value> dict = new std::map<Key,Value>;
if (dict.count(key) < 1) { // If key does not exist, add value
addrDict[key] = value;
}
问题
运行代码时,出现以下错误:
d:\documents\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\stl_function.h:386:20: error: no match for 'operator<' (operand types are 'const Key' and 'const Key')
据我了解,它无法比较映射中两个有序的Key
对象。
因此,我需要在operator<
结构中实现Key
(即使我不关心键的顺序,但是使用无序映射会返回可能与g ++相关的编译器错误) 。我只需要保持由三个不同数组组成的键分开即可。关于如何实现这一点的任何想法?
我做了什么
我通过反复试验的方法实现了操作符,这种解决方案返回了我期望的结果,但是它没有存储所有可能的键:
bool operator<(const Key &rhs) const {
(index[0]*index[1]*index[2]) < (rhs.index[0]* rhs.index[1]* rhs.index[2]);
};
另一方面,如果我这样做:
bool operator<(const Key &rhs) const {
index[0] < rhs.index[0];
};
我只存储几个键,而不是所有可能的键组合。
编辑: 解决了变量定义问题