C++如何使用排序来排序二维数组?

C++如何使用排序来排序二维数组?,c++,arrays,sorting,C++,Arrays,Sorting,我想我的问题很具体。我的程序应该将10个姓名及其对应的电话号码存储到一个数组中。我想按电话号码、升序对姓名/号码进行排序,然后按排序的顺序输出数组。谢谢你的帮助!非常感谢您的帮助。 到目前为止,我所拥有的: using namespace std; main() { string name[10][2]; int x; cout << "Please input 10 names"; for(int i = 0; i < 10; i++){

我想我的问题很具体。我的程序应该将10个姓名及其对应的电话号码存储到一个数组中。我想按电话号码、升序对姓名/号码进行排序,然后按排序的顺序输出数组。谢谢你的帮助!非常感谢您的帮助。 到目前为止,我所拥有的:

using namespace std;

main()
{
    string name[10][2];
    int x;

    cout << "Please input 10 names";
    for(int i = 0; i < 10; i++){
        cin >> name[i][x];
    }
    int i = 0;
    cout << "Please input their corresponding numbers";
    for(x = 0; x < 10; x++){
        cin >> name[i][x];
    }
}

编辑:如果使用并行数组存储stringname和intnumber,并按int对其进行排序,那么这样做可能不会很麻烦吗?当然,如果是这样的话,请按名称对应的编号保留名称,我怎样才能把它从二维数组改成平行数组呢?或者只要给我指出正确的方向,我将不胜感激:

您将需要使用成对向量。在这种情况下,这比映射更方便,因为您希望按值而不是按键进行排序。也有按值对地图进行排序的方法,请参见问题,但为此,成对向量似乎是合适的

如果希望使用常量内存数组而不是动态内存数组std::vector,请使用std::array,其中N是元素数

由于模板lambda,需要C++14

#include <algorithm>
#include <iostream>
#include <utility>
#include <vector>

int main()
{
  std::vector<std::pair<std::string,int>> phonebook;
  phonebook.reserve(10);

  std::cout << "Please input a name and a number\n";
  for (int i = 0; i < 10; ++i) {
    std::cout << "Name: ";
    std::string name;
    std::cin >> name;

    std::cout << "Number: ";
    int number;
    std::cin >> number;

    phonebook.push_back({name, number});
  }

  std::sort( std::begin(phonebook),
             std::end(phonebook),
             [] (auto a, auto b) { return a.second < b.second; });

  for (auto const& entry : phonebook)
  {
    std::cout << entry.first << ' ' << entry.second << '\n';
  }
}

你考虑过用地图来代替吗?如果我理解正确的话,这对你的问题似乎是完美的。我会写一个类来保存名字,电话号码,并将对象放入一个向量中。然后使用std::sort根据比较电话号码的函数对向量进行排序。您可以编写逻辑来对2d数组进行排序,但对我来说,这很难处理。不,我没有。我正在浏览我的C++书籍,目前我正在二维数组中。虽然它不能很好地解释排序,让我无法理解,但我还没有学习有关映射的知识,我正在尝试加强我对数组的知识。为了在对象列表上使用std::sort,它需要具有开始和结束功能。在尝试排序之前,您需要了解如何正确构造数组。第一个循环具有未定义的行为,因为x未初始化,但用作数组索引。未初始化的int不一定自动设置为零。