我有如下循环:
for (multimap<string,string>::iterator it2 = ppp.first;it2 != ppp.second; ++it2)
{
if(it2==ppp.second -1)
str=str+it2->second.substr(0,(it2->second).find('-'));
else
str=str+it2->second.substr(0,(it2->second).find('-'))+'&';
}
我使用的条件如下:
if(it2==ppp.second -1)
用于检查最后一个元素并在我找到最后一个元素时执行一些附加功能。但上述条件不起作用。 它给我一个错误:
"000001.cc", line 50: Error: The operation "__rwstd::__rb_tree<std::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, __rwstd::__select1st<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>::iterator - int" is illegal.
1 Error(s) detected.
有人可以帮忙。
答案 0 :(得分:2)
你还没有发布整个代码片段,所以我不确定ppp是什么,但我相信它就像是一对迭代器。 map的迭代器没有定义operator-(int val),所以你不能使用那个。但是,您可以通过以下方式修复错误:
multimap<string,string>::iterator end_val = ppp.second;
--end_val;
for (multimap<string,string>::iterator it2 = ppp.first;it2 != ppp.second; ++it2)
{
if(it2==end_val)
str=str+it2->second.substr(0,(it2->second).find('-'));
else
str=str+it2->second.substr(0,(it2->second).find('-'))+'&';
}
希望有所帮助。
答案 1 :(得分:0)
尝试
end = ppp.second;
std::advance (end, -1);
if (it2 == end) {}
答案 2 :(得分:-1)
假设ppp
是多图,你应该通过
ppp.begin()
或
ppp.rbegin() // to get a reverse iterator
在你循环中:
multimap<string,string>::iterator it2 = ppp.first
pp.first
不会给出一个迭代器,而是会给出pair
助手类pair<string, string>
的第一个元素