GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistím, zda bylo vložení std::map úspěšné nebo neúspěšné?

Ve skutečnosti metoda vkládání, která přebírá parametr nápovědy, nevrací, zda bylo vložení úspěšné nebo ne. Jedním ze způsobů, jak zkontrolovat, zda k vložení skutečně došlo, by bylo zkontrolovat velikost mapy před a po vložení. Pokud je to stejné, vložení selhalo (tj. klíč již byl přítomen). Vím, že to zní ošklivě, ale je to nejúčinnější způsob, na který jsem mohl přijít. Ve skutečnosti se domnívám, že neexistuje žádný přesvědčivý důvod, proč by vložka s nápovědou neměla vrátit pár (včetně bool) stejně jako běžná vložka bez náznaku. Ale jakmile to bylo specifikováno ve starším standardu, je velmi těžké to změnit, protože jde o převratnou změnu, kterou komunita C++ většinou nesnáší.

Původní (nesprávná) odpověď

Viz tento odkaz

... vrací pár s jeho členem pair::first nastavit na iterátor ukazující buď na nově vložený prvek, nebo na prvek, který již měl v mapě stejnou hodnotu. pair::second prvek v páru je nastaven na hodnotu true, pokud byl vložen nový prvek, nebo na hodnotu false, pokud existoval prvek se stejnou hodnotou.

Odkaz obsahuje také příklad

Například:

if(mp.insert(make_pair(key, value)).second == false)
{
   cout << "Insertion failed. Key was present"
}

typedef std::map<std::string, int> map;
map m;
std::pair<map::iterator,bool> result = m.insert(std::make_pair("hi", 42));

result.second obsahuje to, co chcete


Záleží na tom, co máte na mysli pod pojmem neúspěšné nebo úspěšné.

std::map::insert uspěje, když vloží nový prvek, jinak vrátí iterátor k již existujícímu prvku.

std::map::insert selže, pokud není dostatek paměti pro vložení nového prvku a vyvolá std::bad_alloc .


Linux
  1. Jak poznám, že mám spuštěný vnořený shell?

  2. Jak zjistím, zda má můj server NUMA?

  3. Jak mohu vědět, zda netcat &dd fungují?

  1. Jak zjistit, zda Dd stále funguje?

  2. Jak sdílet připojení k internetu?

  3. Jak zjistit, kde je program v linuxu zaseknutý?

  1. Jak Bash ví, jak je vyvoláván?

  2. Jak vyměnit vadné zařízení Btrfs

  3. Jak ukončit, pokud příkaz selhal?