我认为我的问题非常具体。我的程序应该存储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排序?(当然,同时保留名称)通过相应的数字)如果是这样,我怎么能把它从二维数组改为平行数组呢?(或者只是指向正确的方向我将非常感激):))
答案 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';
}
}