---
# System prepended metadata

title: struct

---

struct
===
如果有一個題目要求你處理某一班學生的成績，學生總共40人，而且科目總共有五科: 國文, 英文, 數學, 物理, 社會。
這時候你可能會想說那就開五個陣列吧! 
`int ch[45], eg[45], ma[45], py[45], so[45];`
確實這個方法是正確的。
但是如果今天要執行某些排序可能就沒那麼方便了，這時就該試試看struct
1. 宣告struct
    ```
    struct student{ //宣告一個struct型態為student
      int ch, eg, ma, py, so;
    };    //分號一定要寫
    ```
2. 宣告以student為型態的東西
    `student grade[45];`
3. 輸入成績
    ```
    for(int i = 1; i <= 40; i++)
         cin >> grade[i].ch >> grade
    ```
    
我們上次的課程有提到在圖論中如果邊有權重該怎麽辦呢？  struct！
1. 
    ```
    struct edge{
      int u,w;
      //u為要去的方向,w為權重;
    } 
    vector<edge> G[5005];
    //宣告vector的型態為edge
    ```
    可是你們應該有個問題是vector只能push_back一個元素啊? 
    不其實用以用個小東西
    G[v].push_back((edge){u,v});
    像這樣
練習時間
請你用struct模擬下件事
1
