我從被調函數返回多圖迭代器。獲取返回的多圖迭代器的內容
代碼:
std::multimap<int,std::string>::iterator it = dst.begin();
for(int count = 0;count<3 && it !=dst.end();++it,++count)
std::cout<<it->second<<":"<<it->first<<std::endl;
return it;
,並調用函數:
std::multimap<int,std::string>::const_iterator rec;
rec= client();
for(int count = 0;count<3 ;++count)
std::cout<<rec->second<<":"<<rec->first<<std::endl; // Prints garbage values
這裏爲什麼我無法打印的rec
直接的內容?在調用功能std::cout<<it->second<<":"<<it->first<<std::endl;
打印正確的值!
整個代碼:
#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
std::multimap<int,std::string>::iterator client()
{
std::vector<std::string> most { "lion","tiger","kangaroo",
"donkey","lion","tiger",
"lion","donkey","tiger"
};
std::map<std::string, int> src;
for(auto x:most)
++src[x];
std::multimap<int,std::string,std::greater<int> > dst;
std::transform(src.begin(), src.end(), std::inserter(dst, dst.begin()),
[] (const std::pair<std::string,int> &p) {
return std::pair<int,std::string>(p.second, p.first);
}
);
std::multimap<int,std::string>::iterator it = dst.begin();
for(int count = 0;count<3 && it !=dst.end();++it,++count)
std::cout<<it->second<<":"<<it->first<<std::endl;
return it;
}
int main()
{
std::multimap<int,std::string>::const_iterator rec;
rec= client();
for(int count = 0;count<3 ;++count,++rec)
std::cout<<rec->second<<":"<<rec->first<<std::endl;
}
非常感謝。如果可以解決,還有一個問題:for(int count = 0; count <3 && it!= dst.end(); ++ it,++ count) std :: cout < second <<":"< first << std: :endl;'打印前三個最常出現的單詞。我想打印所有三個最常出現的單詞。你可以請一些指導! –
user123
與主要問題無關。但是,如果你能回答感謝! – user123
對不起; 「打印前3個最常出現的單詞,我想打印所有三個或全部出現在多重映射中的所有三個最常出現的單詞? – 4pie0