2015-10-12 76 views
-1

以前也有類似的問題,但我在應用這個概念時遇到了困難。我想跟蹤我的向量對中的對的索引,然後,一旦排序,std :: cout輸入順序。分類時跟蹤向量對索引

例如

cin >> 5 6 1 5 1 2 1 2 3 5 
cout << 1 2 1 2 1 5 3 5 5 6 
cout >> 3 4 2 5 1 //and this is where I am having trouble. 

我想轉換爲三元組,其中一個元素是索引,但我無法得到符合我的需求。

任何幫助,將不勝感激。謝謝。

#include <iostream> 
#include <cmath> 
#include <vector> 
#include <cstdlib> 

using namespace std; 

bool compare(const pair<int,int>&A, const pair<int,int>&B); 

int main() 
{ 
    vector<pair<int,int>> v; 
    pair<int,int> tok; 
    while(cin >> tok.first>>tok.second){v.push_back(tok);} 

    sort(v.begin(),v.end(), compare); 
    for(int i = (signed int)v.size()-1; i >= 0 ; i--) 
    { 
     cout << v.at(i).first << " "; 
     cout << v.at(i).second << " "; 
    } 
    cout << endl; 
    return 0; 
} 

bool compare(const pair<int,int>&A, const pair<int,int>&B) 
{ 
    return A.first > B.first; 
} 

回答

0

下面介紹一種方法。很長一段時間,因爲我做了他們的作業,他們;-)

#include <iostream> 
#include <vector> 
#include <sstream> 

using namespace std; 


const string input_data = "5 6 1 5 1 2 1 2 3 5"; 

typedef pair<int, int> integer_pair; 
typedef pair<int, integer_pair> integer_pair_with_input_order; 

bool less_by_integer_pair(const integer_pair_with_input_order& l, 
          const integer_pair_with_input_order& r) 
{ 
    return l.second < r.second; 
} 

int main() 
{ 
    // note - I did this to avoid having to type numbers in. 
    std::istringstream simulate_cin(input_data); 

    vector<integer_pair_with_input_order> v; 
    integer_pair tok; 
    int input_order = 0; 
    while(simulate_cin >> tok.first >> tok.second) { 
     v.push_back(make_pair(++input_order, tok)); 
    } 

    sort(v.begin(),v.end(), less_by_integer_pair); 

    for (int i = 0 ; i < v.size() ; ++i) 
    { 
     const integer_pair_with_input_order& elem = v[i]; 
     cout << "input order : " << elem.first 
     << " { " << elem.second.first 
     << ", " << elem.second.second << " }\n"; 
    } 
    return 0; 
} 
+0

對不起,我應該已經表明,這是一個作業的一部分。 –