Первая часть вашего вопроса:
std::vector<std::string> test;
std::vector<std::string> test2; // assuming map is from string to string
for (it = mymap.begin(); it != mymap.end(); ++it)
{
test.push_back(it->first); // push first in one vector
test2.push_back(it->second); // push second in another vector
}
Итак, да, простой for может делать то, что вы хотите.
Вторая часть вашего вопроса:
Поскольку вы обновляете ключ карты, вам необходимо удалить его с карты и вставить измененный.Итак:
std::string first, second;
first = it->first;
second = it->second;
mymap.erase(it); // be careful with invalidating iterator
// change first
mymap[first] = second;
Чтобы изменить first
, добавив к нему все целые числа i
, это действительно будет зависеть от типа first
.Например, со строкой вы можете означать что-то вроде этого:
ostringstream sout;
for (int i = 0; i < 10; ++i)
sout << (i?" ":"") << i;
first = sout.str();
Или, если первым является, например, set
, вы можете означать что-то вродеэто:
for (int i = 0; i < 10; ++i)
first.insert(i);