我正在尝试建立一个unordered map在n维空间中包含点的位置。我了解std::vector满足成为key的所有要求std::map,但是此代码无法编译。我收到一长串错误消息,但这似乎是最有问题的:
error: no match for call to ‘(const std::hash<std::vector<int> >) (const std::vector<int>&)'.
有谁知道为什么g ++似乎不认为它std::vector<int>是可哈希的?
#include <vector>
#include <unordered_map>
#include <boost/functional/hash.hpp>
using namespace std;
typedef vector<int> point;
int main()
{
unordered_map<point, int>jugSpace;
vector<int> origin(3, 0);
jugSpace.insert( pair<point,int>(origin, 0) );
}
Run Code Online (Sandbox Code Playgroud) 如果您运行make test以下 Makefile(带有空目录):
test.%:
@echo $*
test: test.dummyextension
Run Code Online (Sandbox Code Playgroud)
你会得到以下输出:
dummyextension
o
cc test.o test.dummyextension -o test
clang: error: no such file or directory: 'test.o'
clang: error: no such file or directory: 'test.dummyextension'
clang: error: no input files
make: *** [test] Error 1
Run Code Online (Sandbox Code Playgroud)
为什么?
我怀疑它与隐式规则有关,但我make -p在我的机器上搜索,找不到任何匹配的隐式规则%: %。我希望输出只是dummyextension,但这几乎就像test.o我的目录中有一个虚拟文件(尽管我检查了十次,但没有)。
;如果您在先决条件之后添加test.dummyextension,或向test规则添加任何内容,则一切都会按预期进行。这是我能想到的最小的失败示例,我不知道为什么你会看到这种行为。有任何想法吗?