c++ unordered_map 管理函数实例

#include <stdio.h>
#include <Windows.h> 
#include <iostream>
#include <functional>
#include <unordered_map>

using namespace std; 

class Test {
public:
	void Add(int a, int b);
	void Delete(int c, int d); 
	void Mult(int c, int d);
	void init();
	void RunMap(int index);
private:
 	std::unordered_map<int, void(Test::*)(int, int)> m_FuncMaps;
	std::unordered_map<int, function<void(int, int)>> m_FuncMaps2; 
};

void Test::init()
{
	m_FuncMaps[1] = &Test::Add;
	m_FuncMaps[2] = &Test::Delete;
 	m_FuncMaps2[3] = bind(&Test::Mult, this, placeholders::_1, placeholders::_2);  //方法2
} 
void Test::Mult(int c, int d)
{
	printf("is Mult");
}
void Test::Add(int a, int b)
{
	printf("is Add");
}
void Test::Delete(int a, int b)
{
	printf("is Delete");
}

void Test::RunMap(int index)
{
	auto funcIter = m_FuncMaps.find(index);
	if (funcIter != m_FuncMaps.end())  //方法1
	{
		(this->*funcIter->second)(1, 1);
	}
	auto funcIter2 = m_FuncMaps2.find(index);
	if (funcIter2 != m_FuncMaps2.end())  //方法2
	{
		(funcIter2->second)(1, 1);
	} 
}
 
void main() 
{
	Test test;
	test.init();
	test.RunMap(1);
	test.RunMap(2);
	test.RunMap(3);
	getchar(); 
}

 


通过map管理函数,有类似于控件绑定函数一样的效果


参考:https://blog.csdn.net/chailyuan/article/details/53524948
            

         https://blog.csdn.net/xf_zhen/article/details/52224139

          https://blog.csdn.net/mark20170902/article/details/51944182


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在C++中实现类似于hash_map的容器,你可以使用标准库中的unordered_map容器。unordered_map是一个使用哈希表实现的关联容器,可以存储键值对。 为了在unordered_map中使用自定义对象作为键,你需要提供哈希函数和相等比较函数。哈希函数用于将键映射到哈希值,相等比较函数用于判断两个键是否相等。 下面是一个示例,演示了如何在unordered_map中使用自定义对象作为键: ```cpp #include <unordered_map> #include <iostream> #include <functional> class MyObject { public: int x; int y; // 其他成员变量和方法 // 重载相等比较运算符 bool operator==(const MyObject& other) const { return x == other.x && y == other.y; } }; // 哈希函数 namespace std { template <> struct hash<MyObject> { std::size_t operator()(const MyObject& obj) const { // 使用std::hash组合哈希值 return std::hash<int>()(obj.x) ^ std::hash<int>()(obj.y); } }; } int main() { std::unordered_map<MyObject, int> myMap; MyObject obj1 {1, 2}; MyObject obj2 {3, 4}; myMap[obj1] = 10; myMap[obj2] = 20; std::cout << myMap[obj1] << std::endl; // 输出 10 std::cout << myMap[obj2] << std::endl; // 输出 20 return 0; } ``` 在上面的示例中,我们定义了一个名为MyObject的自定义类。我们重载了相等比较运算符==,以便unordered_map能够正确比较两个MyObject对象是否相等。 为了使unordered_map能够正确地使用MyObject对象作为键,我们还定义了一个哈希函数。在这个示例中,我们使用std::hash<int>来哈希MyObject对象的成员变量x和y,并使用异或操作符^将它们的哈希值组合起来。 最后在main函数中,我们创建了一个unordered_map实例myMap,将MyObject对象作为键,并进行一些操作来验证容器的功能。 请注意,这只是一个示例,你可能需要根据你自己的需求进行适当的修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值