我有一个这样的数组:
姓名,州,房价,汽车价格john,WI,200,100 吉米,MI,100,90 ......
如何在不更改同一行中的元素的情况下对houseprice和汽车价格进行排序?就像根据他们的房价和汽车价格对阵列中的另一行排序整行“john”,但将所有内容保持在一起。
这是我到目前为止所拥有的,
for (int i=0;getline(file,(names[i]),',');i++)
{
getline(file, states[i], ',');
getline(file, houseprice[i], ',') ;
getline(file, carprice[i]);
}
我想如何将houseprice和carprice与另一行排序,而不会丢失名称和状态以及该行。
答案 0 :(得分:0)
只需将您感兴趣的字段作为比较函数对象的一部分进行投影,否则将对象视为一个单元:
house array[] = { ... };
// sort by houseprice; similar for other attributes:
std::sort(std::begin(array), std::end(array), [](house const& h0, house const& h1) {
return h0.houseprice < h1.houseprice;
});
答案 1 :(得分:0)
您需要实现一个将“原始”顺序映射到“已排序”顺序的向量
因此排序算法结果将是一个映射向量,绘制输出表的函数需要按映射向量的顺序绘制它。 例如,如果在排序后所有行都停留在第一个订单位置并且只有第4,5行交换
将映射矢量放置为: 指数:0,1,2,3,4,5,6,7 ...... 数据:0,1,2,3,5,4,6,7,......
因为你的问题很普遍 - 答案也是如此
答案 2 :(得分:0)
您可以使用struct的向量 例如:
struct PersonalInfo
{
string name;
string state;
int housePriceCents;
int carPriceCents;
}
std::vector<PersonalInfo> infos;
然后使用带有传入的比较函数的sort,或者定义&lt;结构中的运算符,以便将价格较低的结构视为低于具有较高价格的结构。