c地图的.containsKey()方法

c地图的.containsKey()方法,第1张

概述我想保存一些重复的工作并编写一个模仿 Java的函数  .containsKey()方法. 基本上我想要这样的东西: using namespace std; map<string,XYclass> mymap; if (!contains(mymap,"key as string") ) cout << "key not found" << endl; 在C中,如果地图包含以下方式的密钥,则 我想保存一些重复的工作并编写一个模仿 Java的函数
 .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()方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1218293.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存