1) The ID is a index of a point in a global point vector, which a user writes in a GLI file. I assume a user specifies all or part of points used in the polyline. 
2) I also thought about it before. I decided to have them separately, because I can shortly use `std::find()` to search a point id. If I use a pair, I need to additionally write a function object (which you can avoid it with a lambda but I know it's not supported by XLC).