相对较新的C ++,以下是我的代码:
void displaydailyreport()
{
std::string myline;
string date[100]; // array for dates
int dailyprice =0;
ifstream myfile("stockdatabase.txt"); // open textfile
int i,j;
for(i=0;std::getline(myfile,myline);i++) // looping thru the number of lines in the textfile
{
date[i] = stockpile[i].datepurchased; // stockpile.datepurchased give the date,already seperated by :
cout<<date[i]<<endl; // prints out date
for(j=i+1;std::getline(myfile,myline);j++)
{
if(date[i] == date[j]) // REFER TO //PROBLEM// BELOW
dailyprice += stockpile[i].unitprice; // trying to add the total price of the same dates and print the
// datepurchased(datepurchased should be the same) of the total price
// means the total price purchased for 9oct16
}
}
cout<<endl;
}
所有内容都已经通过以下方式检索并分离:来自我编写的方法
stockpile[i].unitprice
会打印出价格
stockpile[i].itemdesc
将打印出商品说明
问题
我试图总结相同日期的单位价格。并显示总单价+日期 你可以看到我的文本文件,
如果我执行上述date[i] == date[j]
的声明,但它不会起作用,因为如果在其他地方还有另一个9oct怎么办?
我的文本文件是:
itemid:itemdesc:unitprice:datepurchased
22:blueberries:3:9oct16
11:okok:8:9oct16
16:melon:9:10sep16
44:po:9:9oct16
63:juicy:11:11oct16
67:milk:123:12oct16
68:pineapple:43:10oct16
69:oranges:32:9oct16 <--
C ++是否具有我可以执行此操作的数组对象:
testArray['9oct16']
尝试Ayak973的答案后,//编辑// ,用g ++ -std = c ++编译11 Main.cpp
Main.cpp: In function ‘void displaydailyreport()’:
Main.cpp:980:26: error: ‘struct std::__detail::_Node_iterator<std::pair<const std::basic_string<char>, int>, false, true>’ has no member named ‘second’
mapIterator.second += stockpile[i].unitprice;
答案 0 :(得分:2)
使用c ++ 11支持,您可以使用std :: unordered_map存储键/值对:
#include <string>
#include <unordered_map>
std::unordered_map<std::string, int> totalMap;
//...
for(i=0;std::getline(myfile,myline);i++) {
auto mapIterator = totalMap.find(stockpile[i].datepurchased); //find if we have a key
if (mapIterator == totalMap.end()) { //element not found in map, add it with date as key, unitPrice as value
totalMap.insert(std::make_pair(stockpile[i].datepurchased, stockpile[i].unitprice));
}
else { //element found in map, just sum up values
mapIterator->second += stockpile[i].unitprice;
}
}
之后,您有一张地图,其中日期为关键字,单位价格总和为值。要获取值,可以使用基于范围的循环:
for (auto& iterator : totalMap) {
std::cout << "Key: " << iterator.first << " Value: " << iterator.second;
}
答案 1 :(得分:0)
您可以使用以下链接中实现的哈希表 https://gist.github.com/tonious/1377667 或者,您可以轻松定义具有散列键和值的类,并定义类的数组。