2011-05-13 36 views
7
typedef pair<unsigned char, unsigned char> pair_k; 
map<unsigned char, pair_k> mapping; 

這將是這樣使用:插入對作爲映射值

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

的問題是:

  1. 這可以嗎?在語法上,它感覺很好。
  2. 這是作爲一個數組訪問作爲一個地圖反對嗎?

回答

7

這對我來說看起來沒問題。但是請注意,這是而不是數組訪問;它看起來像是因爲std::map過載operator[]。如果你事後做了mapping.size(),你會發現它會是1

2

根據標準,這是完全有效的C++代碼,因此它是允許的。它只訪問地圖,如地圖 100被映射到對(10,10)

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*。這不是數組訪問。
6

std :: map operator[]返回由100(key)標識的map元素的引用,然後由std :: make_pair(10,10)返回的對覆蓋引用。

我建議:

map.insert(std::make_pair(100, std::make_pair(10,10))); 

插入調用具有訪問地圖只有一次的優勢。

+0

這當然是一個有用的提示,但它似乎並沒有回答問題。 – Johnsyweb 2011-05-13 12:23:06

+0

感謝您的建議,生病可能只是使用薄而不是我寫的。 – freonix 2011-05-14 04:37:06