C ++ сортирует элементы по атрибутам - PullRequest
1 голос
/ 20 января 2012

Есть список предметов и атрибутов.

struct Item { double a, b; Item (double a_, double b_): a(a_), b(b_){}};

typedef std::vector <Item> TItems;
typedef std::vector <double> TAttributes;

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

int main(int argc, char* argv[])
{
    TItems items;
    items.push_back(Item (1.0, 2.0 ));
    items.push_back(Item (3.0, 4.0 ));
    items.push_back(Item (5.0, 6.0 ));

    TAttributes attributes;
    attributes.push_back(8);
    attributes.push_back(7);
    attributes.push_back(9);

    std::pair <TAttributes, TItems> pairs;
    //No element has been coppied
    std::copy (pairs.first.begin(), pairs.first.end(), std::back_inserter (attributes));
     //No element has been coppied
    std::copy (pairs.second.begin(), pairs.second.end(), std::back_inserter (items)); 

    std::sort (pairs.first.begin(), pairs.first.end());
}

Есть 2 проблемы:

A] неподходящая реализация копирования (элемент не был скопирован)

B] слишком "прикрученный" код.

Есть ли более простой способ сортировки списка элементов с использованием другого списка атрибутов?

Как правильно выполнить операцию копирования?

1 Ответ

2 голосов
/ 20 января 2012

На самом деле вы ничего не вкладываете в pairs.Смотрите конструктор std::pair.

std::pair <TAttributes, TItems> pairs(attributes_, items_);

Также, если вы хотите изменить порядок Items на основе значения атрибута, вы, вероятно, захотите вызвать std::sort в списке std::pair<double, Items> (не в паресписок) и предоставить соответствующую функцию сравнения.

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