2018.10.31——11.2关联容器概述

11.8

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

int main(int argc, char * argv[])
{
	string word;
	vector<string> words;
	while(cin>>word)
	{
		if(find(words.begin(), words.end(), word) == words.end())
			words.push_back(word);
	}
	for (auto &w : words)
		cout << w << " ";
	cout << endl;
	return 0;
}

11.9

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <list>
#include <map>
#include <algorithm>

using namespace std;

int main(int argc, char *argv[])
{
	ifstream in(argv[1]);
	if (!in)
	{
		cerr << "无法打开文件" << endl;
		exit(1);
	}
	
	void tran(string &word)
	{
		for(int p = 0; p<word.size(); ++p);
		{
			if(word[p] < 'Z' && word[p] > 'A')
				word[p] -=( 'A' - 'a');
			else if (word[p] = ',' || word[p] == '.' )
				word[p] = word.erase(p,1);
		}
	} 
	
	map<string, list<int>> word_lineno;
	string word;
	string line;
	int lineno;
	while (getline(in, line))
	{
		lineno++;
		istringstream l_in(line);
		while(l_in >> word)
		{
			tran(word);
			word_lineno[word].push_back(lineno);
		}
	}
	for(const auto &w : word_lineno)
	{
		cout << word.lineno << "所在行 " ;
		for (const suto &i :w.lineno)
			cout << i << " ";
		cout << endl;
	}
	return 0;
}

11.10
由于有序容器要求关键字类型必须支持比较操作<, 因此map<vector<int>::iterator,int> ml;是可以的,vector的迭代器支持比较操作。而list元素不是连续存储,其迭代器不支持比较操作

11.11
答案
首先用typedef定义与compareisbn相容的函数指针类型,然后用此类型声明multiset即可

typedef bool (*pf) (const Sales_data &, const Sales_data &);
multiset<Sales_data, pf> bookstore(compareisbn);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值