因为你使用的map的key是const char *类型,即存储的是一个指针类型,所以在下面的代码中使用find函数就找不到对应的key。这里主要要理解c风格字符串和c++字符串的差异。
创新互联是专业的犍为网站建设公司,犍为接单;提供网站设计制作、成都做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行犍为网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
可以将map的key类型改为string,修改后代码:
#include iostream
#include string
#include map
//定义函数指针
typedef void (*fun)(const char *);
//定义map容器
std::mapstd::string, fun mapTest;
void myPrintf(const char *pszStr) { std::cout pszStr std::endl; }
int main(int argc, char *argv[])
{
std::cout "map初始化!" std::endl;
mapTest.insert(std::pairstd::string, fun("myPrintf", myPrintf));
std::string strCmd = "myPrintf";
mapTest["myPrintf"]("123");
bool isFind = (mapTest.find(strCmd) == mapTest.end()) ? true : false;
if (!isFind)
{
mapTest[strCmd]("aaaa");
}
else
{
std::cout "找不到对应的处理函数!" std::endl;
}
return 0;
}
执行结果:
map是 映射, 有一个对应表。
当A事件发生时代调用什么函数处理
当B事件发生时代调用什么函数处理
当..事件发生时代调用什么函数处理
MFC 的例子:
BEGIN_MESSAGE_MAP(CXxxView, CScrollView)
//{{AFX_MSG_MAP(CXxxView)
ON_COMMAND(ID_FORMAT_FONT, OnFormatFont)
ON_COMMAND(ID_COLOR_TEXT, OnColorText)
ON_WM_VSCROLL() // 调用默认函数处理
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()
===
C
switch(message) // 事件 id
{
case 1: fun1(); break; // 直接调用
case 2: fun2(); break;
...
default:break;
}
map::find和map::end的返回值的是迭代器类iterator
class iterator类中数据成员是指针,指向map底层实现的红黑树的节点
iterator定义的operator==/!=函数是比较这个指针是否相等
因此与自定义的类是否定义/重载了operator==/!=函数无关
另外想要知道细节,按F11进入源代码调试
3个函数的功能是什么?
foldr的terminal输入的是什么?
filter是用来过滤的吧,因为返回值是struct llnode *类型,难道只返回首个过滤到的元素?
标准C语言中没有map函数,map是C++的一个函数,参考以下内容研究一下吧