我已经声明了一个包含字符串和映射的multimap。该映射包含字符串和一对ints。
std::multimap<string, std::map<string, std::pair<int, int>>> traders;
std::map<string, std::pair<int, int>> products;
std::pair<int, int> side;我通过以下方式为该多任务添加新的值:
products.emplace(stringValue1, std::pair<int, int>(intValue1, intValue2));
traders.emplace(stringValue2, products);现在,我遇到的问题。我试图找到具有相同键值的交易者,然后读取每个找到的交易者的相关值。要找到具有给定键值的交易者,我使用以下代码,它可以工作
std::pair<
std::multimap<string, std::map<string, std::pair<int, int>>>::iterator,
std::multimap<string, std::map<string, std::pair<int, int>>>::iterator
> ret;
ret = traders.equal_range(stringKeyValue);我可以通过以下代码访问multimap的第一个值(它是字符串)
std::multimap<string, std::map<string, std::pair<int, int>>>::iterator itr1 = ret.first;
std::cout << " " << itr1->first << std::endl;但我不能访问multimap的任何其他元素。如果您查看我的multimap声明,我不仅需要访问第一个字符串,还需要访问第二个字符串和与由其返回的交易员关联的一对ints。
我在尝试不同的东西,但它们都没有用,现在我的头都融化了。希望你们能帮上忙。谢谢。
发布于 2014-03-29 22:14:22
也许这个能帮上忙。我还没试过呢。
typedef std::map<string, std::pair<int, int> > TraderProductMap;
typedef std::multimap<string, TraderProductMap> TraderMap;
typedef TraderProductMap::iterator TraderProductMapIter;
typedef TraderMap::iterator TraderMapIter;
std::pair<TraderMapIter, TraderMapIter> range;
range = traders.equal_range(stringKeyValue);
for(TraderMapIter itTrader = range.first;itTrader != range.second;++itTrader) {
std::cout << " " << itTrader->first << std::endl;
for(TraderProductMapIter itProduct = itTrader->second.begin();itProduct != itTrader->second.end();++itProduct) {
std::cout << " " << itProduct->first << " " itProduct->second->first << " " << itProduct->second->second << std::endl;
}
std::cout << std::endl;
}https://stackoverflow.com/questions/22736564
复制相似问题