首页 > 解决方案 > 我的 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++arraysstdstd-pair

解决方案


这是一个完整的解决方案。我使用了字符串和数字的临时向量,但您可以将它们作为参数传递。以下代码使用 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++。


推荐阅读