LeetCode第 189 场周赛(C++)之第二题之相关C++知识点梳理(map,vector,multimap)

LeetCode第 189 场周赛第二题简述:将一个句子中的单词按照单词字母数量的小大重新排列。

  • vector<string> svec中的插入操作,push_back()可以直接插入一个字符串,无需每个字母逐次push_back()
vector<string> svec;
string str;
svec.push_back(str);
  • mapmultimap的本质就是map的关键字key只能对应唯一一个valuemultimap的关键字可以对应多个value,即multimap允许多个相同的关键字key存在。
  • mapmultimap在插入数据的时候有所不同:
void algoithm()
{
	map<int, int> imap;
	int arr[5] = { 1, 2, 3, 4, 5 };
	int count = 0;
	for (auto& i : arr)
		imap[i] = count++; // multimap不允许关键字以数组的形式出现。
	for (auto& i : imap)
		cout << i.first << ":" << i.second << endl;

	string ch[6] = { "I", "like", "Beijing", "university", "of", "technology" };
	map<string, int> simap;
	for (auto& str : ch)
		simap[str] = count++; // multimap无法用此方法
	for (auto& str : simap)
		cout << str.first << ":" << str.second << endl;
}

运行截图:
在这里插入图片描述

所以可见,无论是map还是multimapkey值无论是整型还是字符串型,均按照由小到大的顺序排列的。

  • 下述例子讲述了multimap错误示范
multimap<string, int> simap;
simap["CSDN_blog"] = 1; // 错误语法,multimap无法使用该语法
map<string, int> simap;
simap["CSDN_blog"] = 1; // 正确语法
  • multimap在插入数据的正确语法
multimap<string, int> simap;
simap.insert(pair<string, int>("CSDN_blog", 1)); // 正确语法

text句子中的单词读取到vector中的写法与答题时有不同,下面是最终题解。

string arrangeWords(string text){
	text[0] += 32; // 首字母转变为小写
	vector<string> svec;
	multimap<int, string> ismap;
	string::iterator iter = text.begin(), itertemp;
	for (;; iter++) // 将单词存储到svec中
	{
		itertemp = iter;
		iter = find(itertemp, text.end(), ' ');
		string tempstr(itertemp, iter);
		svec.push_back(tempstr);
		if (iter == text.end())
			break;
	}
	for (auto& word : svec) // 将单词存储到multimap中
		ismap.insert(pair<int, string>((int)word.size(), word));
	string textnew;
	for (auto& word : ismap) // 将单词存储到string中 
	{
		textnew += word.second;
		textnew += " ";
	}
	textnew.pop_back(); // 最后一个空格去掉使用 pop_back()函数
	textnew[0] -= 32; // 首字母大写
	return textnew; // 返回排序号的句子
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值