应该用set解: // 找到插入位置前后的红线 auto it_right = red_lines.lower_bound(x); auto it_left = prev(it_right); // 删除旧的段长 int old_length = *it_right - *it_left; segments.erase(segments.find(old_length)); // 插入新红线后,产生两个新的段长 int left_segment = x - *it_left; int right_segment = *it_right - x; // 更新段长 segments.insert(left_segment); segments.insert(right_segment); // 将新红线位置插入 red_lines.insert(x);