0
My C++ 11太弱,无法找到解决方案。我有很多在我的项目std::vector<std::pair<const char *, int>>
变量,因此代码的检查,如果一个条目存在重复:使用自己的功能扩展std :: vector <std :: pair <...>>
std::vector<std::pair<const char *, RunningProgramMode>> vProgramMode =
{
{ "server", RunningProgramModeServer },
{ "shell", RunningProgramModeShell },
{ "client", RunningProgramModeClient },
};
// the following code repeats for each variable
for (auto const &it : vProgramMode)
{
if (!strcmp(sParameter, it.first))
{
programParameters->requestedProgramMode = it.second;
}
}
当然,我可以写一个函数[接收std::vector<std::pair<..>>
作为参数]通过矢量,但我这迭代认为它可以更优雅,当我可以扩展std::vector
模板与我的find_member()
功能,该功能与!strcmp(sParameter, it.first)
检查矢量是否有请求的条目并返回.second
值。
事情是这样的:
std::my_vector<std::pair<const char *, RunningProgramMode>> vProgramMode =
{
{ "server", RunningProgramModeServer },
{ "shell", RunningProgramModeShell },
{ "client", RunningProgramModeClient },
};
result = vProgramMode.find_member("shell");
就目前而言,没有必要检查值确实存在。我想保持简单的例子并专注于问题。
不,你不能添加一个成员函数标准类型。 – cpplearner
'find_member(vProgramMode,“shell”)'是完全相同的字符数,并且具有额外的好处,它实际上可能(并且直接)实现,并且不涉及一厢情愿。无论如何,对于你的数据结构,你可能更喜欢'std :: map'。 –