我已经声明了一个包含字符串和映射的多图。该映射包含字符串和一对整数。
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);
我可以通过以下代码访问多图(字符串)的第一个值
std::multimap<string, std::map<string, std::pair<int, int>>>::iterator itr1 = ret.first;
std::cout << " " << itr1->first << std::endl;
但我无法访问多图的任何其他元素。如果您查看我的多图声明,我不仅需要访问第一个字符串,而且还需要访问第二个字符串以及与返回的交易者相关联的一对整数。
我尝试了可能不同的事情,但是没有一个起作用,现在我的头已经融化了。希望您能帮到大家。谢谢。
最佳答案
也许这会有所帮助。我还没有测试。
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;
}