gpt4 book ai didi

c++ - 在 unordered_map 中使用元组

转载 作者:IT老高 更新时间:2023-10-28 22:23:46 24 4
gpt4 key购买 nike

我想在我的 unordered_map 中使用由 intcharchar 组成的元组。我是这样做的:

#include <string>
#include <unordered_map>
#include <cstring>
#include <iostream>
#include <tuple>

using namespace std;

tuple <int,char,char> kk;
unordered_map<kk,int> map;

int main()
{
map[1,"c","b"]=23;
return 0;
}

但这给了我以下错误:

map.cpp:9:21: error: type/value mismatch at argument 1 in template parameter list     for ‘template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc> class    std::unordered_map’
map.cpp:9:21: error: expected a type, got ‘kk’
map.cpp:9:21: error: template argument 3 is invalid
map.cpp:9:21: error: template argument 4 is invalid
map.cpp:9:21: error: template argument 5 is invalid
map.cpp:9:26: error: invalid type in declaration before ‘;’ token
map.cpp: In function ‘int main()’:
map.cpp:14:16: error: assignment of read-only location ‘"b"[map]’

我做错了什么?

最佳答案

unordered_map 的模板参数如下所示:

template<

class Key,
class T,
class Hash = std::hash<Key>,
class KeyEqual = std::equal_to<Key>,
class Allocator = std::allocator< std::pair<const Key, T> >
> class unordered_map;

std::hashnot specialized for tuples (向下滚动到库类型的标准特化)。因此,您需要提供自己的,如下所示:

typedef std::tuple<int, char, char> key_t;

struct key_hash : public std::unary_function<key_t, std::size_t>
{
std::size_t operator()(const key_t& k) const
{
return std::get<0>(k) ^ std::get<1>(k) ^ std::get<2>(k);
}
};
// ..snip..
typedef std::unordered_map<const key_t,data,key_hash,key_equal> map_t;
// ^ this is our custom hash

最后,正如 Benjamin Lindley 已经回答的那样,您需要使用 std::make_tuple:

// d is data
m[std::make_tuple(1, 'a', 'b')] = d;
auto itr = m.find(std::make_tuple(1, 'a', 'b'));

代码来自 Using a std::tuple as key for std::unordered_map这是Live Example .

关于c++ - 在 unordered_map 中使用元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20834838/

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