c++在map中如何将char数组作为关键字插入和搜索呢?
不要用string的情况下如何达成?我的想法如下,可是它说无法将参数1从“initializer-list”转换为“constchar_array&”,有什么解决办法呢?...
不要用string的情况下 如何达成? 我的想法如下,可是它说无法将参数 1 从“initializer-list”转换为“const char_array &”,有什么解决办法呢?
#include<iostream>
#include<unordered_map>
using namespace std;
typedef struct char_array{
char char_array[100];
}Char_array;
int main(){
unordered_map<Char_array, int> mp;
mp.insert({ {"cool"}, 3});
unordered_map<Char_array, int> ::iterator it;
it = mp.find({"cool"}); //似乎不能这样找值?
cout << it->second;
} 展开
#include<iostream>
#include<unordered_map>
using namespace std;
typedef struct char_array{
char char_array[100];
}Char_array;
int main(){
unordered_map<Char_array, int> mp;
mp.insert({ {"cool"}, 3});
unordered_map<Char_array, int> ::iterator it;
it = mp.find({"cool"}); //似乎不能这样找值?
cout << it->second;
} 展开
1个回答
展开全部
我在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"}};
有些编译器还不支持省略掉内部的{}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询