typedef pair<unsigned char, unsigned char> pair_k;
map<unsigned char, pair_k> mapping;
這將是這樣使用:插入對作爲映射值
mapping[100] = make_pair(10,10);
的問題是:
- 這可以嗎?在語法上,它感覺很好。
- 這是作爲一個數組訪問作爲一個地圖反對嗎?
typedef pair<unsigned char, unsigned char> pair_k;
map<unsigned char, pair_k> mapping;
這將是這樣使用:插入對作爲映射值
mapping[100] = make_pair(10,10);
的問題是:
這對我來說看起來沒問題。但是請注意,這是而不是數組訪問;它看起來像是因爲std::map
過載operator[]
。如果你事後做了mapping.size()
,你會發現它會是1
。
根據標準,這是完全有效的C++代碼,因此它是允許的。它只訪問地圖,如地圖值 100被映射到對(10,10)
你爲什麼不嘗試呢?
$ 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*
。這不是數組訪問。std :: map operator[]
返回由100(key)標識的map元素的引用,然後由std :: make_pair(10,10)返回的對覆蓋引用。
我建議:
map.insert(std::make_pair(100, std::make_pair(10,10)));
插入調用具有訪問地圖只有一次的優勢。
這當然是一個有用的提示,但它似乎並沒有回答問題。 – Johnsyweb 2011-05-13 12:23:06
感謝您的建議,生病可能只是使用薄而不是我寫的。 – freonix 2011-05-14 04:37:06