2012-05-02 18 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 

、ベクトル電話hasntが調整されて。どうすればこのことを調整できますか?ありがとう

+1

あなたは物事を単純化し、それぞれが名前と番号の両方を保持するオブジェクトのベクトルを持っているのはなぜですか? –

+0

または名前を数字にマップします。 – chris

+0

マップはリソースの無駄になります。 – JustinDanielson

答えて

5

名前の文字列と電話番号の文字列/ intを保持する構造体を作成します。線形に進み、名前情報を記録します。それをもう一度見て、電話番号の情報を記録してください。その後、並べ替えます。

クラスを作成したくない場合は、pairオブジェクトを使用できます。

vector<pair<string,int> > nameAndNumber; 

編集:おかげで、ベクトル電話hasntが調整され

+0

構造体やクラスを使用せずにベクトル(2つのベクトルをマッピングする)だけを使用することは可能ですか? – WantIt

+0

独自のソート関数を記述すると、名前ベクトルをソートするときに両方のベクトルを同時に変更することができます。しかし、最善のことは、同じオブジェクト内の情報を保持するクラスまたは構造体を作成することです。 – JustinDanielson

+1

OPはC++ 11を指定していないので、右シフト演算子を呼び出さないようにするには、 'vector > nameAndNumber; 'に変更することができます。 – smocking

1

をスモッキング、バグを修正。どうすればこのことを調整できますか?

データ構造内で "name"と "telephone"の両方のエンティティを組み合わせて、そのvectorを使用します。

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

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

は、溶液の完全を期すため、私は名前に基づいてvectorをソートしますoperator <を言及しています。

関連する問題