LINUX.ORG.RU

[c++] Сортировать содержимое list относительно соделжимого vector

 


0

1

Есть список номеров l, который должен быть организован относительно вектора v. Каждому номеру из l соответствует значение(тоже номер в моем случае) из v.

input:
  l: 0 1 2 3
  v: 5 6 3 3
output:
  l: 1 0 2 3
  v: 5 6 3 3

Я знаю что можно сделать sort(l.begin(), l.end(), foo), но как передать v как параметр. Также я могу написать свой сорт с оптимизациями и нужными мне функциями, так что прошу не советовать.

Также я не хочу создавать новые struct или pair, ибо мне нужен список чисел на выходе.

Если я тебя правильно понял, то компаратор, сравнивающий v в сортировке l - как раз то, что тебе нужно.

schizoid ★★★
()

И, возможно, ты захочешь использовать stable_sort.

schizoid ★★★
()

Один я не понял, по какому принципу происходит сортировка? почему в output-е «1 0 2 3», а не «2 3 0 1»?
и ты забыл написать, причем здесь линукс.

mastermind
()

В общем я «придумал», поскольку все это происходит в классе я создам приватную функцию foo, которая будет иметь доступ к приватному v. Только вот если

bool Viajes::lol(int a, int b) {
    bool bar = false;
    if (times[a] > times[b]) bar = true;
    else if (times[a] = times[b] and a > b) bar = true;
}

Он выводит:

Viajes.cpp: In member function ‘void Viajes::ordenar(Red)’:
Viajes.cpp:47:39: error: no matching function for call to ‘sort(std::vector<int>::iterator, std::vector<int>::iterator, <unresolved overloaded function type>)’
Viajes.cpp:47:39: note: candidates are:
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.2/../../../../include/c++/4.6.2/bits/stl_algo.h:5394:5: note: template<class _RAIter> void std::sort(_RAIter, _RAIter)
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.2/../../../../include/c++/4.6.2/bits/stl_algo.h:5430:5: note: void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<int*, std::vector<int> >, _Compare = bool (Viajes::*)(int, int)]
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.2/../../../../include/c++/4.6.2/bits/stl_algo.h:5430:5: note:   no known conversion for argument 3 from ‘<unresolved overloaded function type>’ to ‘bool (Viajes::*)(int, int)’
make: *** [Viajes.o] Error 1
Trieforce
() автор топика

Также я могу написать свой сорт с оптимизациями.. Также я не хочу создавать новые struct или pair..

А я могу тебе посоветовать только очень мощную парадигму программирования, которая поможет в решении любых твоих проблем...

anonymous2 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.