c++ - 我的 C++ 程序不工作......只是卡在这个不知道该怎么做
问题描述
我想从用户那里获取值并想要对其进行排序......所以我在两个数组中获取值,一个在字符串数组中,另一个在 int 数组中......如果我对字符串数组进行排序,它会得到很好的排序.. 我无法相应地对 int 数组进行排序....但它仍然无法正常工作...我希望你们能提供帮助
所以我搜索了网络并尝试使用 STL 中的 pair 函数
void sortItems(char array[][10],int y[],int n){
pair<char,int>pairt[n];
for (int i = 0; i < n; i++)
{
pairt[i].first = array[i][10];
pairt[i].second = y[i];
}
char t[20];
int i,j,k,p=1;
for(i=1; i<=n; i++)
{
for(j=1; j<11; j++)
{
if(strcmp(pairt[j-1], pairt[j])>0)
{
strcpy(t, pairt[j-1]);
strcpy(pairt[j-1], pairt[j]);
strcpy(pairt[j], t);
p=i;
}
}
}
std::cout<<"Dokemon in alphabetical order : \n";
for(i=1; i<=n; i++)
{
std::cout<<array[i]<<endl;
}
}
[错误] 无法将参数 '1' 的 'std::pair' 转换为 'const char*' 到 'int strcmp(const char*, const char*)'
m 得到 4 个这种类型的错误
解决方案
这是一个完整的解决方案。我使用了字符串和数字的临时向量,但您可以将它们作为参数传递。以下代码使用 C++11 特性:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
#include <algorithm>
void main()
{
auto nums = vector < int > {1, 2, 3, 4, 5};
auto words = vector < string > {"hello", "world", "apples", "oranges", "bananas"};
// collect into pairs
using MyPair = pair<string, int>;
vector<MyPair> pairs;
for (size_t i = 0; i < nums.size(); i++) pairs.push_back(make_pair(words[i], nums[i]));
// sort in place the pairs according to the words
std::sort(pairs.begin(), pairs.end(), [](MyPair p1, MyPair p2) {return p1.first < p2.first; });
// re-write original vectors
for (size_t i = 0; i < nums.size(); i++) {
nums[i] = pairs[i].second;
words[i] = pairs[i].first;
}
// now print and check
for (size_t i = 0; i < nums.size(); i++) {
cout << words[i] << ", " << nums[i] << endl;
}
}
首先,我创建了两个向量。接下来,我将它们成对收集。为此,我为一对使用别名,因为稍后我将在 lambda 函数排序中需要它,而且我不想要完整的 pair<...> 文本,它太长了(你可以看到我喜欢短代码,我也没有使用合格的命名空间,除了算法库)。此外,我应该const pair &
在匿名函数中使用,但同样,在这种情况下,我更重视短代码。
(顺便说一句,C++14 甚至可以让你使用auto p1, auto p2
。但我使用了不支持它的 Visual Studio 2013(这就是为什么我可以声明main()
为void
.g++ 不会让你侥幸逃脱......))
然后是排序函数,带有一个 lambda(或匿名)函数,用于比较每 2 对的字符串。
最终,我将这些对拆分回两个向量。我希望这可以更好地理解排序对的方法,一般来说,使用 C++。
推荐阅读
- php - 构建复杂字符串的最佳方法
- r - 有没有办法查看 geom_smooth 统计细节?
- android-studio - 在项目目录中找不到“Podfile”
- terraform - terraform 计划错误:不支持的参数:此处不应使用名为“point_in_time_recovery_enabled”的参数
- r - 将绘图从 plotly 导出为 PDF
- azure - 无法将 ping 请求从一台虚拟机发送到另一台位于不同子网但位于同一虚拟网络中的虚拟机
- android - 是否可以返回 Flow
- > 插入房间后?
- vue.js - 如何允许从浏览器直接访问 chrome 扩展上 SPA 中包含的“页面”?
- ios - ios 14 PHPhotoLibrary.requestAuthorization 不调用处理程序
- python - 熊猫串联导致NaN?