C ++如何使用sort对这个二维数组进行排序?

时间:2017-04-30 01:03:45

标签: 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++){
        cin >> name[i][x];
    }
    int i = 0;
    cout << "Please input their corresponding numbers";
    for(x = 0; x < 10; x++){
        cin >> name[i][x];
    }
}
编辑:是否有可能(而不是麻烦)来做这个,但是使用存储字符串(名称)和int(数字)的并行数组并按int排序?(当然,同时保留名称)通过相应的数字)如果是这样,我怎么能把它从二维数组改为平行数组呢?(或者只是指向正确的方向我将非常感激):))

1 个答案:

答案 0 :(得分:1)

您将需要使用对向量。在这种情况下,这比地图更方便,因为您希望按值而不是按键排序。还有一些方法可以按值对地图进行排序(请参阅问题Sorting std::map using value),但为此目的,对的向量似乎是合适的。

如果您想拥有一个常量内存数组而不是动态内存数组(std::vector),请使用std::array<std::pair<std::string,int>, N>,其中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';
  }
}