map自定义比较,int/string转换,c++字典序比较
map自定义比较
//operator()函数末尾的const非常重要,记得要加
struct CmpByKeyLength {
bool operator()(const string& k1, const string& k2) const{
return k1.length() < k2.length();
}
};
int main() {
map<string, int, CmpByKeyLength> name_score_map;
name_score_map["LiMin"] = 90;
name_score_map["ZiLinMi"] = 79;
name_score_map["BoB"] = 92;
name_score_map.insert(make_pair("Bing",99));
name_score_map.insert(make_pair("Albert",86));
for (map<string, int>::iterator iter = name_score_map.begin();
iter != name_score_map.end();
++iter) {
cout << *iter << endl;
}
return 0;
}
set同理
int/string转换
对于一个字符串,想获得字典序最大的字符串,可以用如下方式转换。
也就是获得了ascii中127对应的字符串。
string({127})
同理,获得比只包含数字字母字典序大的字符串
string({(int)'z'+1})
int转换成string
c++11标准增加了全局函数std::to_string:
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
string转int
std::string str = "123";
int n = atoi(str.c_str());
cout<<n; //123
c++字典序比较
在c语言中:
char* s1;
char* s2;
//比较两个字符串的字典序
if(strcmp(s1,s2)<0){
//则s1的字典序较大
}
在c++中:
string s1;
string s2;
//比较两个字符串的字典序
if(s1.compare(s2)>0){
//s1的字典序大
}