typedef pair<unsigned char, unsigned char> pair_k;
map<unsigned char, pair_k> mapping;
将以这种方式使用:
mapping[100] = make_pair(10,10);
问题是:
答案 0 :(得分:7)
这对我来说没问题。但请注意,这是不数组访问;它看起来像是因为std::map
重载operator[]
。如果您之后执行mapping.size()
,则会发现它将是1
。
答案 1 :(得分:6)
std :: map operator[]
返回对100(key)标识的map元素的引用,然后由std :: make_pair(10,10)返回的对覆盖。
我建议:
map.insert( std::make_pair( 100, std::make_pair(10,10) ) );
插入调用的优点是只能访问一次地图。
答案 2 :(得分:2)
根据标准,这是一个完全有效的C ++代码,因此是允许的。它仅作为地图访问地图,即值 100映射到货币对(10,10)
答案 3 :(得分:2)
你为什么不试试?
$ cat test.cpp
#include <map>
#include <cassert>
int main()
{
using std::map;
using std::pair;
using std::make_pair;
typedef pair<unsigned char, unsigned char> pair_k;
map<unsigned char, pair_k> mapping;
mapping[100] = make_pair(10,10);
assert(1 == mapping.size());
assert(10 == mapping[100].first);
assert(10 == mapping[100].second);
assert(false);
return 0;
}
$ g++ test.cpp -o test
$ ./test
Assertion failed: (false), function main, file test.cpp, line 18.
Abort trap
bash-3.2$
operator
访问*map*
。它不是数组访问。