gpt4 book ai didi

c++ - unordered_map插入错误C++

转载 作者:太空宇宙 更新时间:2023-11-04 15:27:07 25 4
gpt4 key购买 nike

我正在尝试插入一个 unordered_map 并声明一个 std::set 值:

class Database {
...
private:
struct CountryRCID {
int RCID;
int Vote;
};
struct comp {
bool operator() (const CountryRCID& left, const CountryRCID& right) const {
return left.RCID < right.RCID;
}
};
std::unordered_map<const char*, std::set<CountryRCID, comp> > CNTVotes;
};

在数据库构造函数中,我正在从文件中读取数据并尝试插入到 unordered_map 中

Database() {
char CNT[3];
CountryRCID RCIDVote;
... Insert data into CNT and RCIDVote ...
CNTVotes.insert(std::make_pair(CNT, RCIDVote));
}

我尝试用这两种方法编译代码:

g++ main.cpp -std=gnu++0x

g++ main.cpp -std=c++0x

但是我收到错误:

In file included from /usr/include/c++/4.4/bits/stl_algobase.h:66,
from /usr/include/c++/4.4/bits/char_traits.h:41,
from /usr/include/c++/4.4/ios:41,
from /usr/include/c++/4.4/istream:40,
from /usr/include/c++/4.4/fstream:40,
from db.h:1,
from main.cpp:1:
/usr/include/c++/4.4/bits/stl_pair.h: In constructor ‘std::pair<_T1, _T2>::pair(std::pair<_U1, _U2>&&) [with _U1 = char*, _U2 = Database::CountryRCID, _T1 = const char* const, _T2 = std::set<Database::CountryRCID, Database::comp, std::allocator<Database::CountryRCID> >]’:
db.h:50: instantiated from here
/usr/include/c++/4.4/bits/stl_pair.h:107: error: no matching function for call to ‘std::set<Database::CountryRCID, Database::comp, std::allocator<Database::CountryRCID> >::set(Database::CountryRCID)’
/usr/include/c++/4.4/bits/stl_set.h:212: note: candidates are: std::set<_Key, _Compare, _Alloc>::set(std::initializer_list<_CharT>, const _Compare&, const _Alloc&) [with _Key = Database::CountryRCID, _Compare = Database::comp, _Alloc = std::allocator<Database::CountryRCID>]
/usr/include/c++/4.4/bits/stl_set.h:199: note: std::set<_Key, _Compare, _Alloc>::set(std::set<_Key, _Compare, _Alloc>&&) [with _Key = Database::CountryRCID, _Compare = Database::comp, _Alloc = std::allocator<Database::CountryRCID>]
/usr/include/c++/4.4/bits/stl_set.h:188: note: std::set<_Key, _Compare, _Alloc>::set(const std::set<_Key, _Compare, _Alloc>&) [with _Key = Database::CountryRCID, _Compare = Database::comp, _Alloc = std::allocator<Database::CountryRCID>]
/usr/include/c++/4.4/bits/stl_set.h:145: note: std::set<_Key, _Compare, _Alloc>::set(const _Compare&, const _Alloc&) [with _Key = Database::CountryRCID, _Compare = Database::comp, _Alloc = std::allocator<Database::CountryRCID>]
/usr/include/c++/4.4/bits/stl_set.h:136: note: std::set<_Key, _Compare, _Alloc>::set() [with _Key = Database::CountryRCID, _Compare = Database::comp, _Alloc = std::allocator<Database::CountryRCID>]

我也尝试过不同的插入方法:

CNTVotes[CNT] = RCIDVote;

std::pair <const char*, CountryRCID> test (CNT, RCIDVote);
CNTVotes.insert(test);

这只会导致类似的错误

如果有人能帮助我理解为什么它不起作用以及我可以做些什么来使它起作用,我将不胜感激。

谢谢。

最佳答案

可能与您的问题没有直接关系,但 char * 的映射从来没有真正起作用。而不是:

 std::unordered_map<const char*, std::set<CountryRCID, comp> > CNTVotes;

你可能想要:

 std::unordered_map<std::string, std::set<CountryRCID, comp> > CNTVotes;

关于c++ - unordered_map插入错误C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6035547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com