我正在尝试使用std :: vector / std :: map编写一个小的banlist。但我不知道它应该如何运作......
以下是如何在Networking.h上构建“BanList”:
static std::vector<int, std::string>BanList;
这是我的Networking.cpp的片段(目标被添加到禁令中)
if (boost::contains(dataPackage.data, needle1) && boost::contains(dataPackage.data, needle2))
{
// All okay here - Let's jump over & let the thread handle the action
}
else
{
//e.g. BanList.addTarget(Auto-Incremented ID, TargetsIP);
break;
}
所以就在那里//例如BanList.addTarget(int,string);它应该如何与std :: vector或std :: map一起使用?我如何创建一个完整的目标列表?获取IP不是我的问题!问题是如何自动设置ID并将目标添加到列表中......现在已经感谢您的帮助。
答案 0 :(得分:0)
仔细阅读std::vector
的模板参数。 std::string
不是int
的有效分配器:)
这将更接近std::map<int, std::string>
:
std::vector<std::pair<int, std::string>> BanList;
从参考/您最喜爱的图书中了解有关std::vector
/ std::pair
或std::map
的其余内容。这里不值得解释(并且没有足够的空间)。
如果TargetsIP
类似于std::vector<std::string>
,则需要对其进行迭代并在循环中将元素追加到BanList
。
答案 1 :(得分:0)
我不太确定你的问题在这里。如果您想知道如何使用地图,那么您应该看到the online reference。
在您的特定情况下,如果您使用地图:
static std::map<int, std::string> banList;
banList[id] = ipAddress;
我不知道您为什么要将内联映射到禁止列表的字符串。但这就是你如何做到的。
对于向量,除非您正在推送std::pair
对象,否则您无法拥有键/值对。尽管如此,你几乎总是想要使用地图。
要添加到矢量,请使用vec.push_back(item)
。
您可以在线参考找到几乎所有这些内容。