排序数组但保留行索引

时间:2013-10-06 19:28:59

标签: c++ arrays

我有一个这样的数组:

姓名,州,房价,汽车价格

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与另一行排序,而不会丢失名称和状态以及该行。

3 个答案:

答案 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;结构中的运算符,以便将价格较低的结构视为低于具有较高价格的结构。