.containsKey()方法.
基本上我想要这样的东西:
using namespace std; map<string,XYclass> mymap; if (!contains(mymap,"key as string") ) cout << "key not found" << endl;
在C中,如果地图包含以下方式的密钥,则可以检查:
m.find(str) != m.end();
我想写一个泛型方法,如果一个键包含在一个映射中,它返回true.
到目前为止我有以下内容:
template<typename A,typename B> inline bool contains(const std::map< A,B > m,const A& str){ return m.find(str) != m.end();}
当我在地图上运行时,它将无法进行模板参数推导< string,int>跟随调用包含(mymap,“key as string”),因为“key as string”实际上是一个char数组.
当我进行显式实例化时,函数工作正常(即通过使用以下调用包含< string,int>(mymap,“key as string”))
怎么做得好?
解决方法 可以使用以下标识技巧从模板参数推导中排除参数:template <typename T>struct IDentity { typedef T type; };template <typename A,typename B>inline bool contains(const std::map<A,B>& m,const typename IDentity<A>::type& str){ return m.find(str) != m.end();}
DEMO
您现在不需要显式指定类型模板参数.
确切地说,std :: map总共有四个类型模板参数:
template <typename A,typename B,typename Cmp,typename Alloc>inline bool contains(const std::map<A,B,Cmp,Alloc>& m,const typename IDentity<A>::type& str);总结
以上是内存溢出为你收集整理的c地图的.containsKey()方法全部内容,希望文章能够帮你解决c地图的.containsKey()方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)