[英]How to insert pair into map
我有以下映射結構: map < pair < int,int >, object* >
,我希望插入其中。
我怎么做,因為我試圖插入一對和一個對象 ,我必須從中做出一對 ?
我應該使用make_pair()
從我擁有的對和對象中創建一個新對嗎? 如果是的話,你能告訴我怎么做嗎?
object * myObject = // get an object somehow
myMap.insert(std::make_pair(std::make_pair(1,2), myObject));
要么
typedef map<pair<int, int>, object *> MapType;
object * myObject = // get an object somehow
myMap.insert(MapType::value_type(std::make_pair(1,2), myObject));
假設您使用的是C ++ 11或更高版本,最好的方法可能是:
object * myObject = // get an object somehow
myMap.emplace({1,2}, myObject);
對於map, emplace
可以被認為是insert
一個版本,它將key和value作為單獨的參數(它實際上可以采用相應的pair
類型的構造函數可以采用的任何參數組合)。 除了語法更清晰之外,它還可能比make_pair
更有效,因為make_pair
通常會生成一個類型與容器的value_type
不完全匹配的輸出,因此會產生不必要的類型轉換。
我曾經推薦過這個,它也適用於C ++ 11或更高版本:
object * myObject = // get an object somehow
myMap.insert({{1,2}, myObject});
這避免了使用emplace
的輕微意外,但如果鍵或值類型是僅移動的(例如unique_ptr
),它以前不起作用。 這已在標准中得到修復,但您的標准庫實現可能尚未獲得修復。 從理論上講,這也可能稍微低一些,但是在某種程度上,任何中途不錯的編譯器都可以輕松地優化掉。
有兩種方法:
typedef std::map<int,Object> map_t;
map_t map;
Object obj;
std::pair<map_t::iterator, bool> result = map.insert(std::make_pair(1,obj)); // 1
map[1] = obj; // 2
僅當密鑰不存在時才有效,迭代器指向具有鍵值的對,bool指示是否已插入。
更容易,但如果它尚不存在,則首先默認構造對象,然后分配對象而不是復制構造
如果您不必擔心性能,只需選擇是否要刪除上一個條目。
int a=10,b=20;
map < pair < int,int >, int > m;
pair < int,int >numbers = make_pair(a,b);
int sum=a+b;
m[numbers]=sum;
我們的地圖將其鍵作為數字對。我們可以使用點(。)運算符訪問對變量的整數值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.