我正在尝试创建一个std :: unordered_set的Armadillo对象,例如。
std::unordered_set<arma::vec2> my_set;
在编译时,下面的代码吐出大约60多行错误,我认为错误与vec2没有散列函数有关。我试过clang 3.5和gcc 4.8.2。
#include <unordered_set>
#include <armadillo>
bool operator==(arma::vec2 r, arma::vec2 l) {
for (size_t i=0; i<r.size(); ++i)
if (r[i]!=l[i]) return false;
return true;
}
struct vec2Hash {
size_t operator()(const arma::vec2& x) const {
return std::hash<double>()(x[0]) ^ std::hash<double>()(x[1]);
}
};
int main() {
arma::vec2 a{1,2};
std::unordered_set<arma::vec2,vec2Hash> t;
t.insert(a); //This line doesn't compile.
//unordered_set<vec2,vec2Hash> t({a}); //Neither would this line.
return 0;
}