merh Ответов: 2

Заменить элемент в 2-мерном векторе?


Привет Мне нужна помощь, чтобы поймать конкретный второй элемент 2d-вектора и заменить его новой строкой.

vector<pair<int,string>> 2dvector;

Я пробовал использовать итератор, но итератор-это копия вектора, а не сам вектор.

Что я уже пробовал:

for (vector<pair<int,string>>::iterator it = 2dvector.begin() ; it != 2dvector.end(); ++it)
{
 if (it->second.find("OldString") != std::string::npos)
 {
	it->second.insert("NEWSTRING");
 }

}

2 Ответов

Рейтинг:
7

Leo Chapiro

Вы можете работать без итератора ("олдскульного", если вам так проще), например:

vector<pair<int, string>> myVector(10);
myVector[0] = { 1, "test1" };
myVector[1] = { 2, "test2" };
myVector[2] = { 3, "test3" };

int nSize = myVector.size();

for (int i = 0; i < nSize; i++)
{
	if (myVector[i].second == "test2")
		myVector[i].second = "test22";
}


Рейтинг:
19

CPallini

Для того, чтобы заменять струна, я бы предпочел использовать

for ( vector< pair< int, string > >::iterator it = v.begin(); it != v.end(); ++it)
{
  if ( it->second == "OldString")
    it->second = "NEWSTRING";
}

или, с C++11
for ( auto & x : v)
{
  if ( x.second == "OldString")
    x.second = "NEWSTRING";
}