C ++按属性排序项目

时间:2012-01-19 20:25:50

标签: c++ sorting attributes

有一个项目和属性列表。

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());
}

有两个问题:

A]不适合实施复制(没有任何元素被删除)

B]太“搞砸”了代码。

有没有更简单的方法如何使用另一个属性列表对项目列表进行排序?

如何正确实施复制操作?

1 个答案:

答案 0 :(得分:2)

确实你没有在pairs中放任何东西。 请参阅std::pair的构造函数。

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

此外,如果您想根据属性值重新排序Items,您可能希望在std::sort列表中调用std::pair<double, Items>(而不是一对列表)并提供相应的比较功能