有一个项目和属性列表。
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]太“搞砸”了代码。
有没有更简单的方法如何使用另一个属性列表对项目列表进行排序?
如何正确实施复制操作?
答案 0 :(得分:2)
确实你没有在pairs
中放任何东西。
请参阅std::pair
的构造函数。
std::pair <TAttributes, TItems> pairs(attributes_, items_);
此外,如果您想根据属性值重新排序Items
,您可能希望在std::sort
列表中调用std::pair<double, Items>
(而不是一对列表)并提供相应的比较功能