2017-09-12 86 views
0

我已經得到了pair一個vector1,排序由int鍵:分類矢量

std::vector <pair <int,string> > vector1; 
//6 5 1 8 4 2 

然後,我有另一種vector2由包含在vector1數字:

std::vector <string> vector2; 
//1 5 6 8 

我如何使用與vector1中相同的密鑰對vector2進行分類?我想:

unsorted: 1 5 6 8 
sorted: 6 5 1 8 

unsorted: 6 5 1 2 4 
sorted: 6 5 1 2 4 
+2

*「vector2由數字組成」*和'std :: vector vector2'? – Jarod42

+0

@ Jarod42是的。後來我需要這個 –

+0

我沒有完全理解它,所以你想對vector2 進行排序,它們與vector1中出現的優先級相同?因此,例如,如果vector1是[2,3,4],未排序的vector2是[3,4],排序後它應該是[4,3],那是對的嗎? –

回答

0

,你可以從向量1映射的數字,例如向量1是[3, 2, 4],vector2是[4, 3];

  1. 圖中的所有元素,索引exampe 3->0, 2->1, 4->2 (鍵是數字和值索引)。使用地圖或hashmap爲 它。
  2. 現在遍歷vector2,在地圖上爲它的每個元素的搜索和地圖的值改爲:4 becomes 2, 3 becomes 0所以現在vector2成爲[2, 0]
  3. 現在使用sort(vector2.begin(), vector2.end()); vector2成爲[0, 2]
  4. 現在遍歷vector2併爲每個元素我用vector1 [i]代替它: 0->3(因爲vector1中第0個索引處的數字是3),2->4(因爲vector1中第二個索引處的數字是4)。 希望這有助於。
0

如果vector2由總是出現在向量1號,您可以創建地圖的價值觀,像

void SortAccording(std::vector<int>& vec, const std::vector<std::pair<int, string>>& ref) 
{ 
    std::map<int, int> m; 

    int counter = 0; 
    for (auto& p : ref) { 
     m[p.first] = counter++; 
    } 
    std::sort(vec.begin(), 
       vec.end(), 
       [&](int lhs, int rhs) { return m.at(lhs) < m.at(rhs); }); 
} 
+0

我完全不理解它。我正在使用C++ 98 –

+1

我們現在可以使用C++ 17,因此如果您僅限於C++ 98/03,請正確標記 – Jarod42