在c ++中使用向量对数字进行排序[关闭]

Posted

技术标签:

【中文标题】在c ++中使用向量对数字进行排序[关闭]【英文标题】:Sorting numbers using vector in c++ [closed] 【发布时间】:2015-07-27 03:37:28 【问题描述】:

我正在尝试使用向量从最小到最大对某些数字进行排序。当我尝试运行我的代码时,它只显示 ----PRINT----- 和 ---END--- 我卡住了。我在想它是否与排序过程中的修复功能有关。

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

using namespace std;

void print(vector<int> vec)
 
    cout<< "------PRINT---------"<< endl;
    for (vector<int>::const_iterator it=vec.begin(); it!=vec.end(); ++it) 
    cout << *it << " ";

    cout << "------ END ------" << endl;
 
  vector<int> fix(vector<string> numbers)
 
           vector<int> result;  
           sort( result.begin(), result.end() );
           return result;
  

 int main() 


vector<string> test;

test.push_back("5462");
test.push_back("5451");
test.push_back("7854");
test.push_back("221");


print(fix(test));

return 0;

【问题讨论】:

【参考方案1】:

vector&lt;int&gt; result; 更改为vector&lt;int&gt; result = numbers;

将所有vector&lt;string&gt; 替换为vector&lt;int&gt; 并在您push_back 时删除数字周围的引号

【讨论】:

它给了我错误。 21:23:错误:从 'std::vector<:basic_string>>' 转换为非标量类型 'std::vector' 请求 它工作正常。谢谢!【参考方案2】:

在您的 fix 函数中,您正在对 result 进行排序,这是一个空向量。这会导致您遇到需要转换的基本类型不匹配的另一个问题。

如果您希望结果为vector&lt;int&gt;,则必须先将字符串转换为整数。试试这个:

vector<int> fix( vector<string> numbers )

    vector<int> result;
    result.reserve( numbers.size() );
    std::transform( numbers.begin(), numbers.end(), std::back_inserter(result),
        []( const string & s )  return strtol( s.c_str(), NULL, 10 );  );
    sort( result.begin(), result.end() );
    return result;

如果您不理解上述代码,请在此处阅读更多内容:

std::transform std::back_inserter Lambda expression strtol

请注意,此解决方案使用 C++11 中添加的功能。

【讨论】:

【参考方案3】:

问题,到处都是问题

问题 1.

 vector<int> fix(vector<string> numbers)
 
           vector<int> result;  <--- what is this?
           sort( result.begin(), result.end() );  <-- sort what? 
           return result;
  

问题 2。

 vector<int> fix(vector<string> numbers)

 
       // You wanna make vector<string> become vector<int> directly? nope
       // You have to convert yourself
       // or use something like result.push_back(atoi(numbers[i].c_str()))
           vector<int> result;  
           sort( result.begin(), result.end() );
           return result;
  

问题 3。

void print(vector<int> vec)
 
    cout<< "------PRINT---------"<< endl;
   // I seldom see people use iterator on vector<>... but it's ok
    for (vector<int>::const_iterator it=vec.begin(); it!=vec.end(); ++it) 
    cout << *it << " ";
    
   // Missing cout << endl; alert
    cout << "------ END ------" << endl;
 

总结,工作版本:

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

using namespace std;

void print(vector<int> vec)
 
    cout<< "------PRINT---------"<< endl;
    for (vector<int>::const_iterator it=vec.begin(); it!=vec.end(); ++it) 
    cout << *it << " ";
	
    cout << endl << "------ END ------" << endl;
 
  vector<int> fix(vector<string> numbers)
 
           vector<int> result; 
           for(int i=0, l =numbers.size(); i<l; i++) result.push_back(atoi(numbers[i].c_str()));
           sort( result.begin(), result.end() );
           return result;
  

 int main() 


vector<string> test;

test.push_back("5462");
test.push_back("5451");
test.push_back("7854");
test.push_back("221");


print(fix(test));

return 0;

【讨论】:

以上是关于在c ++中使用向量对数字进行排序[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中使用字母和数字 (code="BC1") 属性对 XML 进行排序

在数字前使用字母对 Java ArrayList 进行排序

在Mongodb中使用数字对降序字符串进行排序

对数组进行部分排序 C

在Java中递归地对数字的数字进行排序

使用 NSPredicate 对 NSArray 进行排序,然后存储在一个新数组中