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

本文详细解析了C++ STL中vector与map的高效使用技巧,包括vector的字符串插入方法,以及map和multimap的区别与正确使用方式。通过具体示例,如LeetCode题目解答,展示了如何利用这些数据结构进行字符串处理和排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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["优快云_blog"] = 1; // 错误语法,multimap无法使用该语法
map<string, int> simap;
simap["优快云_blog"] = 1; // 正确语法
  • multimap在插入数据的正确语法
multimap<string, int> simap;
simap.insert(pair<string, int>("优快云_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; // 返回排序号的句子
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值