2012-01-19 7 views
1

Существует список предметов и атрибутов.C++ сортировать элементы по атрибутам

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] непригодны реализация копирования (без ellement не было coppied)

B] тоже "привинченный" код.

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

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

+0

Не могли бы вы перефразировать «проблемы»? Что вы пытаетесь сделать, и в чем проблема? –

ответ

2

Действительно, вы ничего не ставите в pairs. См. Конструктор std::pair.

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

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

Смежные вопросы