junck364 2024-02-23 15:43 采纳率: 0%
浏览 9
已结题

adasis v3中LaneConnectivity

使用C++递归方式,将newPath和newLaneNumber作为参数,查询 initialPath和initialLaneNumber相同的数据,如此往复直到将数据形成完整的数据链。数据如下:

initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 2 , offset 12429
initialPath 1 , initialLaneNumber 3 , newPath 1 , newLaneNumber 3 , offset 12429
initialPath 1 , initialLaneNumber 1 , newPath 2 , newLaneNumber 1 , offset 12429
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 1 , offset 12429
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 2 , offset 13608
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 1 , offset 13608
initialPath 1 , initialLaneNumber 3 , newPath 1 , newLaneNumber 3 , offset 13608
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 3 , offset 29795
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 1 , offset 29795
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 2 , offset 29795
initialPath 1 , initialLaneNumber 3 , newPath 1 , newLaneNumber 4 , offset 29795
initialPath 1 , initialLaneNumber 3 , newPath 1 , newLaneNumber 4 , offset 31790
initialPath 1 , initialLaneNumber 4 , newPath 1 , newLaneNumber 5 , offset 31790
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 3 , offset 31790
initialPath 2 , initialLaneNumber 2 , newPath 1 , newLaneNumber 1 , offset 31790
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 2 , offset 31790
initialPath 1 , initialLaneNumber 5 , newPath 1 , newLaneNumber 6 , offset 42436
initialPath 1 , initialLaneNumber 4 , newPath 1 , newLaneNumber 5 , offset 42436
initialPath 1 , initialLaneNumber 3 , newPath 1 , newLaneNumber 4 , offset 42436
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 3 , offset 42436
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 2 , offset 42436
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 1 , offset 43730
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 2 , offset 43730
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 1 , offset 46516
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 2 , offset 46516
initialPath 1 , initialLaneNumber 4 , newPath 1 , newLaneNumber 4 , offset 46851
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 2 , offset 46851
initialPath 1 , initialLaneNumber 3 , newPath 1 , newLaneNumber 3 , offset 46851
initialPath 1 , initialLaneNumber 4 , newPath 1 , newLaneNumber 3 , offset 52776
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 1 , offset 52776
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 2 , offset 52776
initialPath 1 , initialLaneNumber 3 , newPath 1 , newLaneNumber 2 , offset 52776
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 1 , offset 69289
initialPath 1 , initialLaneNumber 3 , newPath 1 , newLaneNumber 4 , offset 69289
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 2 , offset 69289
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 3 , offset 69289
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 2 , offset 76976
initialPath 1 , initialLaneNumber 3 , newPath 1 , newLaneNumber 3 , offset 76976
initialPath 1 , initialLaneNumber 4 , newPath 1 , newLaneNumber 4 , offset 76976
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 1 , offset 76976
initialPath 1 , initialLaneNumber 3 , newPath 1 , newLaneNumber 2 , offset 77794
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 1 , offset 77794
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 3 , offset 82153
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 2 , offset 82153
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 1 , offset 94060
initialPath 1 , initialLaneNumber 3 , newPath 1 , newLaneNumber 2 , offset 94060
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 2 , offset 96411
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 3 , offset 96411
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 2 , offset 114506
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 3 , offset 114506
initialPath 1 , initialLaneNumber 3 , newPath 1 , newLaneNumber 4 , offset 114506
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 1 , offset 114506
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 2 , offset 122517
initialPath 1 , initialLaneNumber 4 , newPath 1 , newLaneNumber 4 , offset 122517
initialPath 1 , initialLaneNumber 3 , newPath 1 , newLaneNumber 3 , offset 122517
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 1 , offset 122517
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 1 , offset 123324
initialPath 1 , initialLaneNumber 3 , newPath 1 , newLaneNumber 2 , offset 123324
initialPath 1 , initialLaneNumber 2 , newPath 1 , newLaneNumber 3 , offset 126980
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 2 , offset 126980
initialPath 2 , initialLaneNumber 1 , newPath 2 , newLaneNumber 2 , offset 2001 

其中

initialPath 1 , initialLaneNumber 1 , newPath 2 , newLaneNumber 1 , offset 12429
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 1 , offset 12429
和
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 1 , offset 29795
initialPath 1 , initialLaneNumber 1 , newPath 1 , newLaneNumber 2 , offset 29795

输入结果对应两条记录,需要分别拆成独立的数据链

  • 写回答

21条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-23 15:44
    关注
    获得0.45元问题酬金

    引自免费微信小程序:皆我百晓生

    在ADASIS v3中,LaneConnectivity通常用于描述车道间的连接关系,它包含了初始路径(initialPath)、初始车道号(initialLaneNumber)、新路径(newPath)和新车道号(newLaneNumber),以及偏移量(offset)。根据您的要求,您想要通过递归的方式将这些数据按照初始和新的路径及车道号进行关联,形成一个完整的车道转换链。

    由于没有提供具体的类定义或数据结构,我将假设有一个名为LaneConnection的结构体或类来存储每条连接信息,并且我们有一个包含这些对象的容器(如vector)。以下是一个简化的C++示例代码片段,演示如何通过递归的方式来构建这种连接链:

    #include <iostream>
    #include <vector>
    #include <unordered_map>
    
    // 假设的LaneConnection结构体
    struct LaneConnection {
        int initialPath;
        int initialLaneNumber;
        int newPath;
        int newLaneNumber;
        int offset;
    };
    
    std::vector<LaneConnection> connections = [...]; // 这里填充你的所有LaneConnection数据
    
    // 使用unordered_map来临时存储已找到的连接
    std::unordered_map<std::pair<int, int>, std::vector<LaneConnection>> connectionChainMap;
    
    // 递归函数,查找与给定initialPath和initialLaneNumber相匹配的数据,并构建连接链
    void buildConnectionChain(int currentPath, int currentLaneNumber, std::vector<LaneConnection>& chain) {
        // 查找当前路径和车道号对应的连接
        auto it = std::find_if(connections.begin(), connections.end(),
            [&](const LaneConnection& conn) {
                return conn.initialPath == currentPath && conn.initialLaneNumber == currentLaneNumber;
            });
    
        if (it != connections.end()) {
            // 如果找到,则将此连接添加到链中
            chain.push_back(*it);
    
            // 更新当前路径和车道号为新路径和新车道号
            int nextPath = it->newPath;
            int nextLaneNumber = it->newLaneNumber;
    
            // 防止无限递归,检查是否已经存在于连接链中
            auto key = std::make_pair(nextPath, nextLaneNumber);
            if (connectionChainMap[key].empty() || !std::includes(chain.begin(), chain.end(),
                                                          connectionChainMap[key].begin(), connectionChainMap[key].end())) {
    
                // 递归调用,查找下一个连接
                buildConnectionChain(nextPath, nextLaneNumber, chain);
    
                // 将生成的完整链存入map,以便后续查重使用
                connectionChainMap[key] = chain;
            }
        }
    }
    
    int main() {
        std::vector<LaneConnection> startingPoint = { ... }; // 提供你想要开始查询的初始点
        std::vector<LaneConnection> chain;
    
        // 开始递归构建从指定起点开始的连接链
        buildConnectionChain(startingPoint[0].initialPath, startingPoint[0].initialLaneNumber, chain);
    
        // 输出完整的连接链
        for (const auto& conn : chain) {
            std::cout << "initialPath: " << conn.initialPath << ", initialLaneNumber: " << conn.initialLaneNumber
                      << ", newPath: " << conn.newPath << ", newLaneNumber: " << conn.newLaneNumber << ", offset: " << conn.offset << std::endl;
        }
    
        return 0;
    }
    

    注意:上述代码只是一个简化的示例,并未完全实现防环逻辑。在实际应用中,需要确保不会陷入无限循环,同时考虑可能存在的多条不同路径的情况。此外,这里的buildConnectionChain函数是基于单向车道变换进行设计的,如果存在双向变换情况,可能需要进一步修改和完善。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月2日
  • 修改了问题 2月23日
  • 创建了问题 2月23日

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值