c++在map中如何将char数组作为关键字插入和搜索呢?
发布网友
发布时间:2022-05-02 15:26
我来回答
共1个回答
热心网友
时间:2022-06-20 15:52
我在vs 2013中编译的错误指出,你没有提供自定义的hasher和key_equal。我改了一下可以编译,
#include<iostream>
#include<unordered_map>
#include <cstddef>
#include <functional>
#include <cstring>
using namespace std;
typedef struct Char_array{
char char_array[100];
}Char_array;
struct Char_array_hasher
{
size_t operator ()(Char_array const& r) const
{
// hash by address
return hash<char const*>()(r.char_array);
}
};
struct Char_array_equal
{
bool operator()(Char_array const& lhs, Char_array const& rhs) const
{
return memcmp(lhs.char_array, rhs.char_array, sizeof(Char_array)) == 0;
}
};
int main(){
using map_type = unordered_map<Char_array, int, Char_array_hasher, Char_array_equal>;
map_type mp;
mp.insert({ {"cool"}, 3});
map_type::iterator it;
it = mp.find({"cool"}); //似乎不能这样找值?
cout << it->second;
}
如果你还是碰到mp.find编译错误,你可以这么改
mp.find({{"cool"}};
有些编译器还不支持省略掉内部的{}