Сортировать вектор по другому вектору - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь отсортировать вектор по другому вектору.

Например:

vct1.push_back("need");
vct1.push_back("to");
vct1.push_back("sort");
vct1.push_back("this");

тогда у нас есть vct2, который содержит:

vct2.push_back("to");
vct2.push_back("need");
vct2.push_back("this");
vct2.push_back("sort"); 
vct2.push_back("other"); //can be ignored
vct2.push_back("string"); //can be ignored

Так что теперья хочу отсортировать мой vct2 по vct1 результат должен быть примерно таким:

vct2->results
_____________
need
to
sort
this
other
string

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Вы можете использовать iter_swap из <algorithm>.Таким образом, вы можете просто использовать два цикла для

for ( int i = 0; i < vect1.size(); ++i )
{
    for ( int j = 0; j < vect2.size(); ++j )
    {
        if ( vect2.at( j ) == vect1.at( i ) )
        {
            iter_swap( vect2.begin() + j, vect2.begin() + i );
        }
    }
}

. См. this для получения дополнительной информации о iter_swap

.
0 голосов
/ 25 сентября 2019

Вам нужно пользовательское сравнение, которое находит позицию в vec1.

auto find = [&vec1](auto & str){ return std::find(vec1.begin(), vec1.end(), str); };
std::stable_sort(vec2.begin(), vec2.end(), [find](auto & lhs, auto & rhs) { return find(lhs) < find(rhs); };

Это упорядочит вещи не в vec1 в конце, в том порядке, в котором они изначально отображались.Если вам все равно, в каком порядке они отображаются, вместо этого вы можете использовать std::sort.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...