You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取CMake列表中的最大元素?(支持未排序、含重复场景)

在CMake中获取列表的最大值元素

下面介绍两种可靠的实现方式,适用于无序、包含重复元素的CMake列表(字面量或变量存储均可):

方法一:手动遍历比较

通过遍历列表元素,逐个比较并更新最大值,时间复杂度为O(n),效率更高,且不会修改原列表。

# 定义目标列表(可以是字面量或已存在的变量)
set(MyList 5 2 9 3 9 1)

# 处理空列表的边界情况
if(NOT MyList)
    message(WARNING "无法获取最大值:目标列表为空")
    return()
endif()

# 初始化最大值为列表第一个元素
list(GET MyList 0 max_value)

# 遍历所有元素,更新最大值
foreach(item IN LISTS MyList)
    if(item GREATER max_value)
        set(max_value ${item})
    endif()
endforeach()

# 输出结果
message(STATUS "列表最大值:${max_value}")

方法二:排序后取末尾元素

利用CMake内置的list(SORT)命令对列表升序排序,排序后的最后一个元素即为最大值,代码更简洁,但会产生排序的额外开销(时间复杂度O(n log n))。

set(MyList 5 2 9 3 9 1)

if(NOT MyList)
    message(WARNING "无法获取最大值:目标列表为空")
    return()
endif()

# 复制原列表避免修改原始数据(可选,若不需要保留原列表可省略)
set(sorted_list ${MyList})
# 对列表进行升序排序
list(SORT sorted_list)
# 取排序后列表的最后一个元素(索引-1表示末尾)
list(GET sorted_list -1 max_value)

message(STATUS "列表最大值:${max_value}")

注意事项

  • 两种方法都兼容整数类型的列表元素;如果列表包含非数值元素,比较逻辑会失效,需要额外处理类型校验。
  • 务必添加空列表的判断逻辑,避免list(GET)命令报错。

内容的提问来源于stack exchange,提问作者einpoklum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:52:39