template<typename ty,bool flage>
void sort_string_map_name() {
std::chrono::high_resolution_clock::time_point begin = std::chrono::high_resolution_clock::now();
using map_type = ty;
map_type map_name;
std::vector<map_type::iterator> vec_iter_name;
std::string name;
std::vector<std::string> arrayname{"ff","ab","ca","ff","bb","aa","ca",
"we","sg","absd","wege","awe","sdg23","2gds","232gsd","2323","23sdg2323","2gsdg23"};
for(auto &name : arrayname) {
auto it = map_name.insert({name,1});
if(!it.second)
it.first->second++;
else
vec_iter_name.push_back({it.first});
}
if(flage) {
std::sort(vec_iter_name.begin(),vec_iter_name.end(),[](const map_type::iterator lit,const map_type::iterator rit){
if(lit->second == rit->second)
return lit->first < rit->first;
return lit->second < rit->second;
});
}
std::for_each(vec_iter_name.begin(),vec_iter_name.end(),[](const map_type::iterator iter) {
std::cout<<"name: "<<iter->first<<" count:"<<iter->second<<std::endl;
});
std::chrono::high_resolution_clock::time_point end = std::chrono::high_resolution_clock::now();
std::chrono::milliseconds duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - begin);
std::cout<<"map duration : "<<duration.count()<<std::endl;
}
int main() {
sort_string_map_name<std::map<std::string,int>,false>();
sort_string_map_name<std::unordered_map<std::string,int>,false>();
sort_string_map_name<std::map<std::string,int>,true>();
sort_string_map_name<std::unordered_map<std::string,int>,true>();
return 0;
}