插入对作为地图值

时间:2011-05-13 11:00:13

标签: c++ stl map

typedef pair<unsigned char, unsigned char> pair_k;
map<unsigned char, pair_k> mapping;

将以这种方式使用:

mapping[100] = make_pair(10,10);

问题是:

  1. 这是允许的吗?从语法上讲,感觉还不错。
  2. 这是否可以作为数组访问,而不是地图?

4 个答案:

答案 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$ 
  1. 当然允许并按预期行事。
  2. 这是通过subscript operator访问*map*。它不是数组访问。