首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 陣列排序後對應輸出原始球隊名稱:使用結構體或 Map 關聯資料

     編輯:程式設計綜合問答

問題情境

陣列元素代表球隊,隨機分配數值後依數值排序,需輸出排序後對應的球隊中文名稱。原始陣列為 int 型別,僅含數值,缺乏球隊身分資訊。

方案一:結構體/類別封裝(推薦)

struct Team {
    int id;           // 原始編號/隨機值
    string name;      // 球隊中文名
    int randomVal;    // 排序依據
};

vector teams = {
    {1, "雄獅", 0}, {2, "猛虎", 0}, {3, "蒼鷹", 0}, ...
};

// 分配隨機值
for (auto& t : teams) t.randomVal = rand() % 1000;

// 依隨機值排序
sort(teams.begin(), teams.end(), [](const Team& a, const Team& b) {
    return a.randomVal < b.randomVal;
});

// 輸出排序後球隊名
for (const auto& t : teams) cout << t.name << " ";

方案二:平行陣列 + 索引排序

若不想改動現有 int[],可建立索引陣列排序:

int values[] = { /* 隨機值 */ };
string names[] = { "雄獅", "猛虎", "蒼鷹", ... };
int n = sizeof(values)/sizeof(values[0]);
vector idx(n);
iota(idx.begin(), idx.end(), 0); // 0,1,2...
sort(idx.begin(), idx.end(), [&](int a, int b){ return values[a] < values[b]; });
for (int i : idx) cout << names[i] << " ";

方案三:std::map / unordered_map

map id2name = {{1,"雄獅"},{2,"猛虎"},{3,"蒼鷹"}};
vector> vec; // {隨機值, id}
for (auto& p : id2name) vec.push_back({rand(), p.first});
sort(vec.begin(), vec.end());
for (auto& p : vec) cout << id2name[p.second] << " ";

選型建議

方案優點適用場景
結構體資料封裝完整、語意清晰、易擴充屬性新專案、物件導向設計
平行陣列+索引不動原始陣列、記憶體連續、效能佳舊代碼重構、高效能需求
Map鍵值對應直觀、自動去重ID 稀疏、需頻繁查詢名稱

核心原則:「數值與身分綁定」,排序時攜帶身分資訊,即可輕鬆輸出對應名稱。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved