陣列元素代表球隊,隨機分配數值後依數值排序,需輸出排序後對應的球隊中文名稱。原始陣列為 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] << " ";
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 稀疏、需頻繁查詢名稱 |
核心原則:「數值與身分綁定」,排序時攜帶身分資訊,即可輕鬆輸出對應名稱。