2012-05-02 92 views
1

可以說我有1個向量的名稱和另一個向量的電話號碼。首先,用戶將輸入姓名(不排序,意味着他們不是從a到z),然後,用戶將輸入相應的電話號碼。維持向量的順序

在填寫完兩個向量之後,程序會在名稱向量(向量1)中執行排序機制。問題現在是矢量2(因爲沒有采用機制將其映射到矢量1)。

例子:

vector name | vector telephone 
f    232132 
a    34242342 
b    997345 

the result will be 

vector name | vector telephone 
a    232132 
b    34242342 
f    997345 

,你可以看到,矢量電話處理不當進行了調整。我們該如何調整呢?謝謝

+1

爲什麼不讓事情變得簡單一些,並有一個對象的矢量,每個對象同時包含名稱和數字? –

+0

或將地圖名稱編號。 – chris

+0

地圖會浪費資源。 – JustinDanielson

回答

5

創建一個結構,其中包含名稱的字符串和電話號碼的字符串/ int。線性查看並記錄名稱信息。再次瀏覽並記錄手機號碼信息。然後排序。

如果您不想創建課程,則可以使用pair對象。

vector<pair<string,int> > nameAndNumber; 

編輯:固定的一個錯誤,由於縮褶

+0

是否可以僅使用矢量(映射2矢量),而不使用結構或類? – WantIt

+0

如果你編寫你自己的排序函數,你可以讓它同時對兩個向量進行排序,因爲它對排名向量進行排序。但最好的辦法是創建一個類或結構,將信息保存在同一個對象中。 – JustinDanielson

+1

OP沒有指定C++ 11,因此可能需要將其更改爲'vector > nameAndNumber;'以避免調用右移運算符。 – smocking

1

載體電話處理不當了調整。我們該如何調整呢?

通過在數據結構中結合實體「名稱」和「電話」,然後使用它的vector

struct NameNumber { 
    std::string t_Name; 
    unsigned long t_Number; 

    bool operator < (const NameNumber&) const; // use 't_Name' inside 
}; 
std::vector<NameNumber> v; 

對於解決方案的完整性,我剛纔提到的operator <將根據名稱排序vector