Разница во времени при сортировке вектора структур - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь отсортировать векторы из 2 структур с различным количеством элементов:

    struct1 {
      int id1;
      int id2;
      string name;
      double ts1;
      double ts2;
    }

    struct2 {
      int id1;
      int id2;
      //string name; <-- this was left out
      double ts1;
      double ts2;
    }
std::vector<struct1> vec1;
std::vector<struct2> vec2;

Когда я пытался отсортировать vec1 и vec2 на основе ts1, в сортировке существует большая разница время. Размеры vec1 и vec2 большие (> 100 тыс. Элементов). Влияет ли размер структуры на сортировку?

РЕДАКТИРОВАТЬ: моя функция сортировки

inline bool sorting(const Type &lhs, const Type &rhs) {
    if (lhs.ts1 < rhs.ts1) {return true;}
    else {return false; }
}

std::sort(vec.begin(),vec.end(),
          [this] (Type lhs, Type rhs) { return sorting(lhs,rhs); });

1 Ответ

4 голосов
/ 30 апреля 2020

Ваша функция сортировки недопустима. То, как вы это написали, возможно, что две структуры каждая меньше другой. Если это может произойти, алгоритм сортировки может go всегда.

Вместо

    if (lhs.ts1 < rhs.ts2) {return true;}

вам нужно

    if (lhs.ts1 < rhs.ts1) {return true;}

или, возможно,

    if (lhs.ts2 < rhs.ts2) {return true;}
...