Why do big projects like Unreal Engine write their own container classes?

In addition to the reasons mentioned by @cigien - even if the developers of such applications don't need a tailor-made container, it's still the case that several standard-library containers are simply quite slow, e.g.:

  • Why is std::unordered_map slow, and can I use it more effectively to alleviate that?
  • std::vector typically/always uses heap allocation, not a small-vector optimization (like short-string optimization but for vectors)

There are several reasons why a project might not use STL containers:

  1. The containers used in the project are tailor-made to have certain performance characteristics that are different from the STL versions.

  2. The STL containers might not even have existed when the custom containers were designed, and it's not worth the effort to make such a large change to a working project.

  3. While most developers are used to STL containers, most contributors to a particular project might actually be more used to the custom versions, and how they should be used, and retraining all of them might not be worth the effort either.

For any particular project, some, or all of the above, and even other reasons might contribute to the decision to use custom containers.