This is simple with substr() and find(). 
#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct Person
{
    string m_id;
    string m_name;
    int    m_age;
};
int main()
{
    vector<string> data;
    vector<Person> people;
    data.push_back("id1|Name1|25");
    data.push_back("id2|Name2|35");
    for(int i(0); i < data.size(); ++i){
        size_t idx  = data[i].find("|");
        string id   = data[i].substr( 0, idx);
        string name = data[i].substr(idx+1, data[i].find_first_of("|", idx) + idx - 1);
        string age  = data[i].substr( data[i].find_last_of("|") + 1 );
        Person p = {id, name, stoi(age)};
        people.push_back(p);
    }
    for(int i(0); i < people.size(); ++i)
        cout << people[i].m_id << "  " << people[i].m_name << "  " << people[i].m_age << endl;
    return 0;
}
and the output is 
id1  Name1  25
id2  Name2  35