我有一个兴趣班(称之为X)。
我有一个标准::清单< X * >(称之为L)。
我有一个函数(称之为F)。根据检查列表中每个X的内部状态的算法,F(L)返回L的一个子集(std :: list < X * >)。我要添加到我的应用程序std :: map < int,X * >(称之为M),我需要定义F(M)以与F(L)相同的方式运行 - 也就是说,F(M)必须返回std :: list < X * >,通过检查映射中每个X的内部状态来确定。std :: list和std :: map的常用算法?
作为一个自我描述的懒惰程序员,我立即发现算法将[在逻辑上]相同,并且每个数据类型(std :: list和std :: map)都是可迭代的模板。我不想两次保持相同的算法,但我不知道如何前进。
一个办法是采取X *的从F(M)(也就是‘从键 - 值映射值’),扔进一个std ::名单< X * >,和将处理转到F(std :: list < X * >),传递返回std ::列表< X * >;通过。我看不出这是唯一的方法。
我的问题:我如何在一个地方维护核心算法,但仍保留迭代序列或对联合容器值的能力?
谢谢!
我喜欢这个,因为函子真的很简洁。和Mic和Anon一样的想法。但我觉得最优雅。谢谢! – 2009-12-14 07:07:43
@Chris - 我同意,我不知道remove_copy_if的行为就像我自己(奇怪的命名),一定会将它添加到我自己的阿森纳:)。 – Mic 2009-12-14 18:57:46