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'。 –