Как обновить std:: map после использования метода find?
Как обновить значение ключа в std::map
после find
способ?
у меня есть объявление карты и итератора следующим образом:
map <char, int> m1;
map <char, int>::iterator m1_it;
typedef pair <char, int> count_pair;
Я использую карту для хранения количества вхождений символа.
Я использую Visual C++ 2010.
4 ответа:
std::map::find
возвращает итератор к найденному элементу (или кend()
если элемент не найден). До тех пор, покаmap
не const, вы можете изменить элемент, на который указывает итератор:std::map<char, int> m; m.insert(std::make_pair('c', 0)); // c is for cookie std::map<char, int>::iterator it = m.find('c'); if (it != m.end()) it->second = 42;
Я бы использовал оператор[].
map <char, int> m1; m1['G'] ++; // If the element 'G' does not exist then it is created and // initialized to zero. A reference to the internal value // is returned. so that the ++ operator can be applied. // If 'G' did not exist it now exist and is 1. // If 'G' had a value of 'n' it now has a value of 'n+1'
таким образом, используя эту технику становится очень легко прочитать все символы из потока и подсчитать их:
map <char, int> m1; std::ifstream file("Plop"); std::istreambuf_iterator<char> end; for(std::istreambuf_iterator<char> loop(file); loop != end; ++loop) { ++m1[*loop]; // prefer prefix increment out of habbit }