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;
}
展开
 我来答
seizeF
推荐于2017-12-16 · TA获得超过412个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:226万
展开全部

我在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"}};

有些编译器还不支持省略掉内部的{}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式