如何解决从 for 循环获取地图中的上一项或下一项
我正在制作一个可以同时接受多个运算符的计算器(例如 5x5x5)。我有一张地图,其中包含运算符的位置以及它们的类型(x/+-)。我还有一个 for 循环 for (auto const& [key,val] : oper_map)
,它是从 this 帖子中获得的。
为了得到左右数字,我需要知道左右运算符在哪里。我尝试将 std::prev
和 std::next
与 key
一起使用,如下所示:
int loper_pos = -1;
int roper_pos = 0;
double lnum;
double rnum;
char loper;
char roper;
//map defined elsewhere
for (auto const& [key,val] : oper_map)
{
//loper is left operator while roper is right opeprator
//tracks the position of the loop
int map_pos = std::distance(oper_map.begin(),oper_map.find(key));
if (map_pos == 0) loper_pos = -1;
else
{
loper_pos = std::prev(key);
loper = std::prev(val);
}
if (map_pos == oper_map.size()) roper_pos = oper_map.size() + 1;
else
{
roper_pos = std::next(key);
roper = std::next(val);
}
但我想它不起作用,因为 key
不是迭代器?我也不能增加/减少 key
或 val
(或者在 this 帖子中使用 C++11 版本时),所以我猜它不算作迭代器?我不知道迭代器让我感到困惑。
This post appears 是我想要的,但无论出于何种原因lower_bound()
不适用于 oper_map
;没有合适的转换。
解决方法
没有。 Dim str1 As String
Dim str2 As String
str1 = Range("B2").Value
x = 1
Do Until str2 = "/"
If x = Len(str1) + 2 Then GoTo OUT
str2 = Mid(str1,x,1)
x = x + 1
Loop
OUT:
Range("E2").Value = Left(str1,x - 2)
End Sub
不是迭代器。
key
for (auto const& [key,val] : oper_map)
是对映射中键的 key
引用。如果需要迭代器,请使用迭代器:
const
但是,请考虑 for (auto it = oper_map.begin(); it != oper_map.end(); ++it) {
auto next = std::next(it);
auto prev = std::prev(it);
}
不是顺序容器。如果您对容器中元素的位置感兴趣,也许 std::map
更方便(注意 std::next
的复杂性对于双向迭代器(map)是线性的,而对于随机访问迭代器(向量),同样适用于 std::vector< std::pair<Key,MappedValue>>
)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。