<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/121277>121277</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang-tidy] Check request: performance-use-flat-associative-containers
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang-tidy
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          denzor200
      </td>
    </tr>
</table>

<pre>
    
Because of continuous memory layout, `std::flat_map` shows better performance in searching than `std::map`.
Of course, complexity of insertion and erasure operations is linear, which is worse than O(log N), but we don't want all that from a constant container.

```
{
    std::map<std::string, int> m1 = ...;                   // OK
    std::set<std::string> m2 = ...; // OK
    std::multimap<std::string, int> m3 = ...; // OK
    std::multiset<std::string> m4 = ...;                   // OK
}
{
    const std::map<std::string, int> m1 = ...;             // INCORRECT
    const std::set<std::string> m2 = ...;                  // INCORRECT
    const std::multimap<std::string, int> m3 = ...;        // INCORRECT
    const std::multiset<std::string> m4 = ...;             // INCORRECT
}
{
    const std::flat_map<std::string, int> m1 = ...; // OK
    const std::flat_set<std::string> m2 = ...;             // OK
 const std::flat_multimap<std::string, int> m3 = ...;   // OK
    const std::flat_multiset<std::string> m4 = ...;        // OK
}
```

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyslc-O4jgQxp_GuZSIkkpC4JADfxpptVIjtfa-cpIi8a5jsy6nWebpR6ZRD_TQagYNsoTiuL766mfHJZlVZ4gqUSxFsY7k6HvrqpbMN-swSaLatsdKJIslNXJkAruDxhqvzGhHhoEG646g5dGOXuAKxDRh34psIbLFTkv_9yD3YpoA9_bAUJP35GBPbmfdIE1DoAwwSdf0ynTge2muJN6iY5EstiHv6JhClsYOe03_K38MfpRhcl5ZA9K0QE7y6AjsnpwMswyKQStD0oXYQ6-aPkwdrGN6S7kVONO2g2eB87CmHj0cCFprBJYeDtJ4kFqHxR52zg4gAwX24UXAIZUhF2yGMU3OI1mIcimSBQDAVUnZ6v2RvVOmC0mV8SJ7giEFka0hjmORLeHnn8CNwA1s__wozORvCAdFvFT8NH4YtVdfusvu1_rcUH5_iaJcX3E8Yf8dNM9J_nhebV9enlZ_3da_E-pnJXyh_gDyX9d_YBtuqH-xD-_f-v2b8fHw3FJ8AP-V7E2Xj0C_x-wDtG-c9IvbI2qrrJ1ncxlRlZZZkeN0iknUV2lazOezps2yppU4z2Q7lzjFQtZUTDGvI1VhgnmKOEMsyiSJ06Yuc2pn5Swv22ZGIk9okErHWr8OsXVdpJhHqlJMsSwjLWvSfGoKiI2Wppt41R4FYmgSrgpRk3rsWOSJVuz5h45XXp_ayUVYsYZVT82_4Oi_kdiLbHHZBCYj0yQgnEhm2yjp1StN3u9Vjkanq977PQeoJ2Sd8v1Yx40dBG5C7vPfZO_sP9R4gZtTQSxwc67ptcLvAQAA__9LJPyy">