簡體   English   中英

如何將對插入地圖

[英]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
  1. 僅當密鑰不存在時才有效,迭代器指向具有鍵值的對,bool指示是否已插入。

  2. 更容易,但如果它尚不存在,則首先默認構造對象,然后分配對象而不是復制構造

如果您不必擔心性能,只需選擇是否要刪除上一個條目。

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.

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