私は自分でC++を学んでいるので、いくつかの領域に空白のページがあります。コンテナでのいくつかの操作、さまざまな操作の名前など。したがって、この問題を解決するために私を助けてください。(また、適切なコンテナーとそれらを処理する方法を選択するのに役立つ優れたリソースに送っていただければ幸いです。実際の実装例は、この方法で簡単に入手できるため、非常に役立ちます。)
これは私の最初の「本物の」プログラムです。私はPHPで作成しましたが、学習しながらC ++に書き直しています(そして、もっと難しいと言えます)。
つまり、ファイルが読み取られ、対応する要素(人の名前、アイテムの名前、アイテムの金額)を含む3つの異なるベクトルが作成されます。したがって、たとえば(値を割り当てる方法ではなく、内容を説明するためだけに):
vector<string> vectorOfNames = {"Adam", "Eva", "Adam", "Adam", "Bruce"};
vector<string> vectorOfItems = {"Apple", "Apple", "Orange", "Pear", "Melon"};
vector<int> vectorOfAmount = {1, 9, 2, 4, 1};
今、私はそれを(人とアイテムで)表現し、それらのベクトルを(量で)数えたいと思います。次のようなものを印刷するには:
All persons:
Adam
Eva
Bruce
All items:
Apple - 10
Orange - 2
Pear - 4
Melon - 1
Adam have:
Apple - 1
Orange - 2
Pear - 4
Eva have:
Apple - 9
Bruce have:
Melon - 1
PHPでは、* array_keys(array_flip())*を使用して一意の名前とアイテムを取得しました。C ++では、次のようなものが見つかりました。
vector< string >::iterator r , w ;
set< string > tmpset ;
for( r = vectorOfNames.begin() , w = vectorOfNames.begin() ; r != vectorOfNames.end() ; ++r )
{
if( tmpset.insert( *r ).second )
{
*w++ = *r ;
}
}
vectorOfNames.erase( w , vectorOfNames.end() );
それはうまく機能しますが、問題は元のvectorOfNamesを変更することです。これを適用する前に、このベクトルを新しいベクトルにコピーする必要がありますか、それとも別のアプローチがありますか?
PHPで必要な残りの処理については、foreachステートメントとifステートメントを使用しました。C ++でさまざまなアプローチを試しましたが、何も機能しません。私は完全に迷子になっています...また、Boost Libraryにはいくつかの機能があることも知っていますが、当面はそこに行きたくないので、最初に基本を学ぶことを好みます。
一方、この処理を簡単にするために、マップなどの他のコンテナを使用する必要がありますか?
それで、あなたが私が何を意味するかをまだ知っていて、あなたが眠りに落ちなかったならば、正しい方向に私を押してください;)