2013-09-27 2 views
0

Если у меня есть структура сказать,Вставка в STL карта элемента структуры

struct temp 
{ 
    int var1, var2, var3, var4, var5; 
} 

и STL карта, как это:

map < int, temp > mymap; 

Теперь, я просто хочу, чтобы обновить значение var2, является это можно сделать с помощью функции вставки карты STL ..? Может ли кто-нибудь навестить меня здесь, пожалуйста.?

Спасибо

+1

Почему вы выбрали 'зЬй: map'? – Mahesh

+0

Как мои структуры данных были разработаны, мне придется использовать std :: map – user2812535

+0

Вы можете сделать это с помощью одной строки: 'mymap [1] .var2 = 2;'. Этот код обновит 'var2' для' temp structure', связанных с ключом 1. Если этот ключ еще не существует, он будет вставлен в качестве значения по умолчанию для карты, а затем 'var2' будет установить сразу. – renzo

ответ

1

Insert для вставки. Если вы просто хотите обновить, тогда вам нужно создать find структуру, которую вы хотите обновить. Например.

map < int, temp >::iterator i = mymap.find(88); // find entry with key 88 
if (i != mymap.end() // did we find it? 
    i->var = 99; // update vars2 
0

Согласно std::map::insertdocumentation:

проверки работы вставки, имеет ли каждый вставлен элемент с ключа, эквивалентную одному из элемента уже в контейнере, и , если это так, то элемент не вставлен, возвращая итератор на этот существующий элемент

так что вы можете использовать insert для извлечения итератора в уже существующий элемент.

Поскольку были и другие варианты, включая упомянутый find и оператор индекса я предполагаю, что это должно подвести его, и вы можете выбрать в зависимости от ваших потребностей:

#include <map> 
#include <cstdlib> 
#include <iostream> 

struct Dummy 
{ 
    int nDummyValue; 
}; 

int main(int argc, char** argv) 
{ 
    std::map<int, Dummy> Map; 
    Dummy DummyInstance = { 1 }; 
    std::pair<std::map<int, Dummy>::iterator, bool> InsertionResult = Map.insert(std::pair<int, Dummy>(1, DummyInstance)); // Inserts {1, {1}} 
    InsertionResult.first->second.nDummyValue = 2; // Sets {1, {1} to {1, {2}} 
    DummyInstance.nDummyValue = 5; 
    Map[5] = DummyInstance; // Adds {5, {5}} 
    std::map<int, Dummy>::iterator MapIterator; 
    MapIterator = Map.find(4); 
    if(MapIterator != Map.end()) 
     MapIterator->second.nDummyValue = 4; // Is not run because there is no element with key 5 
    MapIterator = Map.find(5); 
    if(MapIterator != Map.end()) 
     MapIterator->second.nDummyValue = 10; // Changes {5, {5}} to {5, {10}} 
    for(std::map<int, Dummy>::iterator Iterator = Map.begin(); Iterator != Map.end(); ++Iterator) 
     std::cout << Iterator->first << " : " << Iterator->second.nDummyValue << std::endl; 
    return EXIT_SUCCESS;  
} 
+0

Благодарим вас за четкое объяснение. – user2812535

Смежные вопросы