我的地图定义为std::map<std::string, textInfo> tempMap;
textInfo类有一些属性textsize
,textcolor
,textfont
等。
我想从此地图中选择一个与textInfo
类中的属性的给定值匹配的项目。
例如,如果地图包含
<"A",textInfo("10","Red","Verdana")>
<"B",textInfo("12","Green","Timesnewroman")>
<"C",textInfo("11","Blue","Cambria")>
我想选择包含&#34; Cambria&#34;的项目。在它textfont属性。
<"C",textInfo("11","Blue","Cambria")>
答案 0 :(得分:2)
std::find_if
应该可以满足您的需求。
示例程序:
#include <iostream>
#include <map>
#include <algorithm>
struct textInfo
{
std::string textsize;
std::string textcolor;
std::string textfont;
};
int main()
{
std::map<std::string, textInfo> m =
{
{"A", {"10","Red","Verdana"}},
{"B", {"12","Green","Timesnewroman"}},
{"C", {"11","Blue","Cambria"}}
};
auto iter = std::find_if(m.begin(),
m.end(),
[](std::pair<std::string, textInfo> const& item)
{ return (item.second.textfont == "Cambria");});
if ( iter != m.end() )
{
auto& item = iter->second;
std::cout << item.textsize << ", " << item.textcolor << ", " << item.textfont << std::endl;
}
}
输出:
11, Blue, Cambria
答案 1 :(得分:0)
您只能通过密钥直接访问地图,这里是您的std :: string。要在值中搜索值或甚至变量,就像在这里一样,你必须迭代整个地图。
std::map<std::string, textInfo>::const_iterator it = tempMap.begin();
for (; it != tempMap.end(); ++it)
{
if (0 == tempMap[(*it)].textfont.equals("Cambria")) // You could use == operator if it's a std::string
{
break; // found
}
}
// Do something with the found item. If the iterator is tempMap.end(), nothing found!
查看here了解更多信息。