簡體   English   中英

在C ++迭代器問題中使用帶有一對的映射作為鍵

[英]using map with a pair as a key in c++ iterator issues

我有一對,地圖也這樣聲明

typedef pair<string,string> Key;
typedef map< Key, double> Map;

我像這樣通過for循環將對象插入其中

Key p (string1, string2 );
pair_map.insert(make_pair( p, double1 ) );

如何在地圖上找到元素? 我在使用find設置迭代器時遇到麻煩。

假設我正在使用it = pair_map.find(make_pair(string1,string2)) ;

我試過聲明pair_map<Key, double>::iterator it; map<Key, double>::iterator it; 但都沒有為我工作。 我怎樣才能解決這個問題?

由於typedef的原因,我得到的錯誤都是長期無效的類型轉換錯誤

Map::iterator it = pair_map.find(make_pair(string1, string2));

當然可以使用

auto it = ...;

要么

decltype(pair_map.begin()) it = ...;

在C ++ 11中。

你需要

Map::iterator it = ....

或者,在C ++ 11中,

auto it = pair_map.find(make_pair(string1, string2));

pair_map變量的名稱,而不是類型

Map::iterator it = pair_map.find(make_pair(string1,string2));

(如juanchopanza所說)將起作用,

std::map<Key, double>::iterator it = pair_map.find(make_pair(string1,string2));

要么

auto it = pair_map.find(make_pair(string1,string2));

如果您有C ++ 11。

不要為迭代器類型使用變量名,而應使用類型名,例如:

pair_map<Key, double>::iterator it;

采用

Map::iterator it;

要么

map<Key, double>::iterator it;

實際上,您不應該對map typedef,因為這很令人困惑。 隨處使用模板。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM