C ++用std :: vector或std :: map制作一个banlist

时间:2016-02-18 14:46:05

标签: c++ list dictionary vector std

我正在尝试使用std :: vector / std :: map编写一个小的banlist。但我不知道它应该如何运作......

以下是如何在Networking.h上构建“BanList”:

static std::vector<int, std::string>BanList;
  • Int代表ID
  • 目标IP的字符串

这是我的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并将目标添加到列表中......现在已经感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

仔细阅读std::vector的模板参数。 std::string不是int的有效分配器:)

这将更接近std::map<int, std::string>

std::vector<std::pair<int, std::string>> BanList;

从参考/您最喜爱的图书中了解有关std::vector / std::pairstd::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)

您可以在线参考找到几乎所有这些内容。