我自己學習C++,因此我在一些領域有一些空白頁面,例如。對容器的一些操作,不同操作的名稱等。 因此請幫助我解決這個問題。我也很感謝給我發送好的資源,這將幫助我選擇正確的容器和方法來處理它們。真正的實現例子將會有很大的幫助,因爲用這種方式可以更容易地獲得它。)如何處理矢量以獲得所需的輸出?
This是我第一個'真正'的節目。我在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};
現在,我想(通過個人和項目)來表示它和count(按金額)的載體,例如。打印如下:
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和如果陳述。 我正在嘗試C++的不同方法,但沒有任何工作。我完全失去了...... 另外我知道在Boost Library中有一些功能,但暫時我不想去那裏,更喜歡首先學習基本知識。
另一方面,也許我應該使用其他容器,如地圖或其他東西,使這個處理更容易?
所以,如果你還知道我的意思,你沒睡着,請把我在正確的方向;)
在C++ 11中,'std :: vector v = {val1,val2,val3}'完全沒問題。 :P –
Xeo
@Xeo如果你使用的是MSVC :-( – Benj
)對於這個例子,爲什麼不堅持使用一對簡單的地圖呢std :: map user_items; // key是用戶名std :: map item_cost; // key是項目名稱 –
Jerdak