find实现

// find.cpp: 定义控制台应用程序的入口点。
//
#include <vector>
#include <iostream>
#include <map>
#include <string>

template<class InputIterator, class T>
InputIterator find(InputIterator &first, InputIterator &end, const T& value) {
	while (first != end && *first != value) {
		++first;
	}
	return first;
}


template<class InputIterator, class predicit>
InputIterator find_if(InputIterator &first, InputIterator &end, predicit pred) {
	while (first != end && !pred(*first)) {
		first++;
	}
	return first;
}


class map_finder {
public:
	map_finder(const std::string& cmp_string) : m_s_cmp_string(cmp_string) {
	}
	inline bool operator()(std::map<int, std::string>::value_type &pair) const {
		return pair.second == m_s_cmp_string;
	}
private:
	const std::string m_s_cmp_string;
};

int main()
{
	std::map<int, std::string> mymap;
	mymap.insert(std::make_pair(10, "China"));
	mymap.insert(std::make_pair(20, "USA"));
	mymap.insert(std::make_pair(30, "English"));
	mymap.insert(std::make_pair(40, "Japan"));
	std::map<int, std::string>::iterator first = mymap.begin();
	std::map<int, std::string>::iterator end = mymap.end();
	auto it = find_if(first, end, map_finder("English"));
	if (it == end) {
		std::cout << "find fail";
	}
	else {
		std::cout << (*it).first;
	}
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值