diff --git a/MeoAssistance/Assistance.cpp b/MeoAssistance/Assistance.cpp index 3975404cdd..c7e35da3b1 100644 --- a/MeoAssistance/Assistance.cpp +++ b/MeoAssistance/Assistance.cpp @@ -529,7 +529,7 @@ void asst::Assistance::set_opers_idtf_result(const json::value& detail) ofs.close(); } -std::optional> asst::Assistance::get_opers_idtf_result() +std::optional> Assistance::get_opers_idtf_result() { constexpr static const char* Filename = "operators.json"; std::ifstream ifs(GetCurrentDir() + Filename, std::ios::in); @@ -547,7 +547,7 @@ std::optional> asst::Assistance::get_opers_i return std::nullopt; } json::value root = std::move(parse_ret.value()); - std::unordered_set opers_info; + std::unordered_map opers_info; try { for (const json::value& info_json : root["all"].as_array()) { @@ -555,7 +555,7 @@ std::optional> asst::Assistance::get_opers_i info.name = info_json.at("name").as_string(); info.elite = info_json.at("elite").as_integer(); info.level = info_json.get("level", 0); - opers_info.emplace(std::move(info)); + opers_info.emplace(info.name, std::move(info)); } } catch (json::exception& exp) { diff --git a/MeoAssistance/Assistance.h b/MeoAssistance/Assistance.h index 1b5c2ecb95..2f63aa2cab 100644 --- a/MeoAssistance/Assistance.h +++ b/MeoAssistance/Assistance.h @@ -64,7 +64,8 @@ namespace asst { void append_callback(AsstMsg msg, json::value detail); void clear_exec_times(); static void set_opers_idtf_result(const json::value& detail); // 保存干员识别结果 - static std::optional> get_opers_idtf_result(); // 读取干员识别结果 + static std::optional> + get_opers_idtf_result(); // 读取干员识别结果 std::shared_ptr m_window_ptr = nullptr; std::shared_ptr m_view_ptr = nullptr; diff --git a/MeoAssistance/IdentifyOperTask.cpp b/MeoAssistance/IdentifyOperTask.cpp index 28c4fb8929..c3d6fa0113 100644 --- a/MeoAssistance/IdentifyOperTask.cpp +++ b/MeoAssistance/IdentifyOperTask.cpp @@ -50,7 +50,7 @@ bool asst::IdentifyOperTask::run() json::value result_json; std::vector opers_json_vec; - for (const OperInfrastInfo& info : detected_opers) { + for (const auto& [name, info] : detected_opers) { json::value info_json; info_json["name"] = info.name; info_json["elite"] = info.elite; @@ -63,8 +63,8 @@ bool asst::IdentifyOperTask::run() std::vector not_found_vector; for (const std::string& name : InfrastConfiger::get_instance().m_all_opers_name) { auto iter = std::find_if(detected_opers.cbegin(), detected_opers.cend(), - [&](const OperInfrastInfo& oper) -> bool { - return oper.name == name; + [&](const auto& pair) -> bool { + return pair.first == name; }); if (iter == detected_opers.cend()) { not_found_vector.emplace_back(name); @@ -78,7 +78,7 @@ bool asst::IdentifyOperTask::run() return true; } -std::optional> asst::IdentifyOperTask::swipe_and_detect() +std::optional> asst::IdentifyOperTask::swipe_and_detect() { json::value task_start_json = json::object{ { "task_type", "InfrastStationTask" }, @@ -88,7 +88,7 @@ std::optional> asst::IdentifyOperTask::swipe std::unordered_map feature_cond = InfrastConfiger::get_instance().m_oper_name_feat; std::unordered_set feature_whatever = InfrastConfiger::get_instance().m_oper_name_feat_whatever; - std::unordered_set detected_opers; + std::unordered_map detected_opers; int times = 0; bool reverse = false; @@ -113,12 +113,12 @@ std::optional> asst::IdentifyOperTask::swipe OperInfrastInfo info; info.elite = elite; info.name = textarea.text; - detected_opers.emplace(std::move(info)); + detected_opers.emplace(textarea.text, std::move(info)); } json::value opers_json; std::vector opers_json_vec; - for (const OperInfrastInfo& info : detected_opers) { + for (const auto& [name, info] : detected_opers) { json::value info_json; info_json["name"] = Utf8ToGbk(info.name); info_json["elite"] = info.elite; @@ -149,7 +149,11 @@ std::optional> asst::IdentifyOperTask::swipe return detected_opers; } -std::vector