运用map,string并于执行期指定排序准则

class RuntimeStringCmp
{
public:
	enum cmp_mode
	{
		normal,
		nocase,
	};

	RuntimeStringCmp(cmp_mode mod=normal):mode(mod)
	{

	}

	~RuntimeStringCmp()
	{

	}

	static bool nocase_compare(char char1,char char2)
	{
		return toupper(char1) < toupper(char2);
	}

	bool operator()(const string& str1, const string& str2)
	{
		if (mode == normal)
		{
			return str1 < str2;
		}
		else
		{
			return lexicographical_compare(str1.begin(), str1.end(), str2.begin(), str2.end(), nocase_compare);
		}
	}

private:
	const cmp_mode mode;
};

void printMap(const map<string, string, RuntimeStringCmp>& mapObj)
{
	typedef map<string, string, RuntimeStringCmp>::const_iterator  mapIter;
	for (mapIter iter = mapObj.begin(); iter != mapObj.end(); iter++)
	{
		cout << iter->first << " " << iter->second << endl;
	}

}

int main()
{
	map<string, string, RuntimeStringCmp> stringMap;

	string tempString1;
	string tempString2;
	while(cin >> tempString1)
	{
		cin >> tempString2;
		stringMap[tempString1] = tempString2;
	}

	printMap(stringMap);
	cin.clear();

	RuntimeStringCmp cmp(RuntimeStringCmp::nocase);
	map<string, string, RuntimeStringCmp> stringMap2(cmp);

	while(cin >> tempString1)
	{
		cin >> tempString2;
		stringMap2[tempString1] = tempString2;
	}
	printMap(stringMap2);

	system("pause");
        return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值