【问题标题】:Sort two-dimensional array without touching second dimension在不触及第二维的情况下对二维数组进行排序
【发布时间】:2016-12-27 02:32:39
【问题描述】:

首先,您可能想知道:为什么需要二维,只需创建两个一维数组即可。
好吧,这是我的任务:用户键入查询数,然后对于每个查询,他输入任务的 ID,对于 ID = 0,我需要使用第一个数组 ([][0]),对于 ID = 1 第二个,如果没有它会更漂亮if 语句 (if (ID == 0)...blablabla)。
当然有一种方法可以通过排序算法(冒泡,快速......)来做到这一点,但我有点好奇:可以用std::sort(); 函数完成吗?
谢谢。
附:这是一个简单的例子来澄清:

很抱歉举出这么糟糕的例子,我要编辑它,首先是我拥有的数据

2 1   
14 5   
5 7   
3 45  `

所以我需要像这样对它进行排序:

2 1   
3 5   
5 7   
14 45

所以当输入查询时,例如 id=1 number=2 只输出array[2][1];

【问题讨论】:

  • 听起来你需要一个多图,而不是二维数组。
  • 我不确定我是否关注您的问题。你想知道你是否可以通过 sort() 函数对其进行排序?当然可以。检查这个link。
  • std::multimap(带有int 键和int 值)几乎肯定是您要在这里使用的,因为它本质上是按键排序并提供对数复杂度搜索。
  • 如果Altainia的回答不令人满意,你为什么接受?另外,我在您的问题中没有看到您不想要几个一维数组的原因。
  • 是的,我用两个一维数组做到了

标签: c++ arrays sorting multidimensional-array


【解决方案1】:

您可以将数据表示为某种结构

struct data{
  int id;
  int other_data;
  ...
};

仅按 ID 排序...

{
  std::vector<data> my_vec;
  //Populate my_vec
  std::sort(my_vec.begin(), my_vec.end(), [](const data& d1, const data& d2){
    return d1.id < d2.id;
  });
}

三大好处:

  1. 如果您以后还需要other_data_2 来保持与id 的顺序,添加它很简单
  2. 您可以避免使用复杂的多维数组
  3. 您可以避免使用数组(通过使用向量)

【讨论】:

  • 这不会也对数据节点中的other_data 进行排序吗?在此代码中,id 和 other_data 将保持在一起,这是 OP 不想要的。
  • 嗯,你是对的。当我第一次看到它时,我没有在他的例子中看到这一点。 ...
猜你喜欢
  • 2013-08-17
  • 2022-01-10
  • 2012-04-03
  • 2011-10-25
  • 2015-09-17
  • 1970-01-01
相关资源
最近更新 更多